对象的多态性向上转型和向下转型

多态
某一个事物,在不同时刻表现出来的不同状态。
举例: Cat c=new Cat();
Animal a=new Cat();
猫可以是猫的类型。猫 m = new 猫();
同时猫也是动物的一种,也可以把猫称为动物。动物 d = new 猫();

向上转型和向下转型

向上转型:子类对象变为父类对象
格式:父类 父类对象=子类实例,自动转换;
public class ZhuanXingDemo {
public static void main(String[] args) {
//B b=new B(); //实例化的是子类对象
//b.Fu(); //调用被子类覆盖过的方法
A a=new B();//实例化子类对象,对象向上转型
a.Fu();//调用被子类覆盖过的方法
}
}
class A{
public void Fu(){
System.out.println(“父类方法”);
}
}
class B extends A{
public void Fu(){
System.out.println(“重写父类”);
}
}
向下转型:父类对象变成子类对象
格式:子类 子类对象=(子类)父类实例,强制转换;
public class ZhuanXingDemo {
public static void main(String[] args) {
//B b=new B(); //实例化的是子类对象
//b.Fu(); //调用被子类覆盖过的方法
// A a=new B();//实例化子类对象,对象向上转型
// a.Fu();//调用被子类覆盖过的方法
A a=new B();//实例化子类对象,对象向上转型
B b=(B)a;// 对象需要强制性向下转型
b.Fu();// 调用被子类覆盖过的方法
}
}
class A{
public void Fu(){
System.out.println(“父类方法”);
}
}
class B extends A{
public void Fu(){
System.out.println(“重写父类”);
}
}
错误的向下转型
A a =new A;//直接实例化父类对象
B b=(B)a;//强制向下转型,此处产出“ClassCastException”转型异常
b.Fu();//此语句无法执行

猜你喜欢

转载自blog.csdn.net/weixin_43791033/article/details/85100337
今日推荐