Java基础学习——多态

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/biandi9300/article/details/89885390

Java基础学习——多态


多态是面向对象中的一个重要概念,主要分为以下两种类型:

  1. 向上转型:
    子类对象——>父类对象
  2. 向下转型:
    父类对象——>子类对象

转型格式如下:
对象向上转型:父类 父类对象 = 子类实例;
对象向下转型:子类 子类对象 = (子类)父类对象;

先创建一个父类A

class A{					// 定义类A
	public void fun1(){		// 定义fun1()方法
		System.out.println("A --> public void fun1(){}") ;
	}
	public void fun2(){
		this.fun1() ;		// 调用fun1()方法
	}
}

再创建A的一个子类B

class B extends A{
	public void fun1(){		// 此方法被子类覆写了
		System.out.println("B --> public void fun1(){}") ;
	}
	public void fun3(){
		System.out.println("B --> public void fun3(){}") ;
	}
}

对象的向上转型:

public class PolDemo01{
	public static void main(String asrgs[]){
		B b = new B() ;		// 实例化子类对象
		A a = b ;			// 向上转型关系
		a.fun1() ;			// 此方法被子类覆写过
		//a.fun3() ;
	}
}

这里进行了向上转型,运行结果如下
在这里插入图片描述
总结规律:
如果对象发生了向上转型,所调用的方法一定是被子类重写过的方法。如果将//a.fun3() ;这一行取消注释,则会报错,结果如下
在这里插入图片描述
在这里插入图片描述
对象的向下转型:

public class PolDemo02{
	public static void main(String asrgs[]){
		A a = new B() ;			// 向上转型关系
		B b = (B)a ;		// 发生了向下转型关系
		b.fun1() ;
		b.fun2() ;
		b.fun3() ;
	}
}

结果如下:
在这里插入图片描述
这里有一点需要注意:在进行对象的向下转型时,必须首先发生对象的向上转型,否则将出现对象转换异常。
如果将A a = new B() ;改成A a = new A() ;,也就是不先进行向上类型转换,则结果如下
在这里插入图片描述
这里可以这样理解,先发生向上类型转换,相当于是由子类去实例化父类的对象,也就是说让父类知道他有这么一个子类,所以再进行向下类型转换不会有问题。

(上面很多知识点引用自《Java开发实战经典》(李兴华著))

猜你喜欢

转载自blog.csdn.net/biandi9300/article/details/89885390