什么是多态

格式: 父类名称 对象名 = new 子类名称();


访问成员方法: 编译看左边,运行看右边

public class Fu{
    public void method(){
        System.out.println("父类多态");
    }
}
public class Zi extends Fu{
    @Override
    public void method(){
        System.out.println("子类多态");
    }
    public void  methodZi(){
        System.out.println("子类多态Zi");
    }
}
public class test{
    public static void main(String[] args){
        Fu obj = new Zi();
        obj.method();	//编译看左(等号左边),Fu里有method方法,且子类覆盖重写,所以输出“子类多态”
        obj.methodZi();	//编译看左(等号左边),Fu里没有method方法,编译报错
    }
}

多态中的向上转型: 格式:父类名称 对象名 = new 子类名称();(就是多态写法) 含义:右侧创建一个对象,把它当作父类来看待。 注意:向上转型一定是安全的。(因为从小范围转向大范围) 弊端:对象一旦向上转型为父类,那么就无法调用子类原本特有的内容。


多态中的向下转型: 格式:子类名称 对象名 = (子类名称)父类对象; 含义:将父类对象【还原】为本来的子类对象

Animal animal = new Cat(); //本来是猫,向上转型成为动物 Cat cat = (Cat) animal; //本来是猫,已经被当成动物了,还原回来成为猫 弊端:若对象创建时本来不是猫,现在非要向下转型成为猫,就会报错(ClassCastException)

public class test {
    public static void main(String[] args) {
        Animal animal = new Cat() ;
        Cat cat = (Cat) animal;	//正确
        Dog dog = (Dog) animal;	//错误
    }
}

弊端解决方案(instanceof)

public class test {
    public static void main(String[] args) {
        Animal animal = new Cat();
        animal.eat();
        if(animal instanceof Cat){
            Cat cat = (Cat) animal;
            cat.catchMouse();
        }
        if(animal instanceof Dog){
            Dog dog = (Dog) animal;
            dog.watchHouse();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值