Java语言多态教程
多态是针对于父子类而言的,即父类的对象有时可以转换成子类的类型。子类的对象有些情况下可以转换成父类类型。
多态主要分为两种类型,向上转型,子类对象转换成父类对象。向下转型,父类对象转换成子类对象。
Java语言多态
语法
父类 父类对象 = 子类实例; //对象向上转型
子类 子类对象 = (子类) 父类实例; //对象向下转型
参数
参数
描述
父类
父类的名字
子类
子类的名字
父类对象
父类 new 出来的一个对象
子类对象
子类 new 出来的一个对象
说明
多态还是针对于父类和子类而言的,将子类转换成父类,直接将子类对象赋给父类对象就可以了,将父类转换成子类对象,需要将父类对象进行强制转换,在前面将父类标识出来。
案例
我们定义一个父类
package com.haicoder.net.changetype;
public class FatherClass{
public void fun1(){
System.out.println("调用父类的 fun1 方法");
}
public void fun2(){
System.out.println("调用父类里面的 fun2 方法");
}
}
定义一个子类
package com.haicoder.net.changetype;
public class ChildClass extends FatherClass{
public void fun1(){
System.out.println("调用子类的 fun1 方法");
}
public void fun3(){
System.out.println("调用子类的 fun3 方法");
}
}
定义一个测试类
package com.haicoder.net.changetype;
public class TestMain{
public static void main(String[] args){
System.out.println("嗨客网(www.haicoder.net) \n");
System.out.println("=======向上转型开始=====");
ChildClass childClass = new ChildClass();
FatherClass fatherClass = childClass;
fatherClass.fun1();
System.out.println("=======向上转型结束=====\n");
System.out.println("=======向下转型开始=====");
FatherClass fatherClass1 = new ChildClass(); //发生了向上转型
ChildClass childClass1 = (ChildClass) fatherClass1; //发生向下转型
childClass1.fun1();
childClass1.fun2();
childClass1.fun3();
System.out.println("=======向下转型结束=====");
}
}
运行结果如下:
从父类转换成子类表示向下转型,从子类转换成父类表示向上转型。
向上转型的时候,我们看到,虽然是父类的对象的 fun1 方法,但是打印的结果是调用子类的 fun1 方法。所以我们可以理解为如果对象向上发生了转型,调用的方法一定是被子类覆盖写过的方法。但是此时是无法调用子类里面的 fun3 方法的。
向下转型的时候,我们看到必须要先对对象向上转型,然后再能向下转型,否则会出现对象转换异常。
package com.haicoder.net.changetype;
public class TestMain{
public static void main(String[] args){
System.out.println("嗨客网(www.haicoder.net) \n");
System.out.println("=======向上转型开始=====");
ChildClass childClass = new ChildClass();
FatherClass fatherClass = childClass;
fatherClass.fun1();
System.out.println("=======向上转型结束=====\n");
System.out.println("=======向下转型开始=====");
FatherClass fatherClass1 = new FatherClass();
ChildClass childClass1 = (ChildClass) fatherClass1;
childClass1.fun1();
childClass1.fun2();
childClass1.fun3();
System.out.println("=======向下转型结束=====");
}
}
运行结果如下:
Java多态总结
多态是针对父子创建的对象而言的。向上转型的时候,调用的方法一定是被子类覆盖写过的方法。向下转型的时候,必须要先对对象向上转型,然后再能向下转型,否则会出现对象转换异常。