关于多态

关于多态

Java的特性之一 多态  很多小伙伴搞不懂,问这个问题。尤其是很多初学者,觉得别扭。我总结个例子,大家看一看吧~

看看向上转型:

package com.toov5.Reordering;

class Person{
    public void print(){
        System.out.println("吃喝拉撒");
    }
}

class SuperMan extends Person{
    public String fly(){
        return "飞起来~~~";
    }
}

public class Test {
   public static void main(String[] args) {
    Person person = new SuperMan();  //向上转型
    SuperMan pMan = (SuperMan) person;
    System.out.println(pMan.fly());
    
}
    
    
}

向上转型描述的是一些公共特征。而向下描述的是子类自己特殊的定义环境。向下转型不一定是安全的啊,因为在进行向下转型之前一定要首先发生向上转型

 

package com.toov5.Reordering;

class Person{
    public void print(){
        System.out.println("吃喝拉撒");
    }
}

class SuperMan extends Person{
    public String fly(){
        return "飞起来~~~";
    }
}

public class Test {
   public static void main(String[] args) {
    Person person = new Person();  //不转型
//    Person person = new SuperMan();//向上转型   
    SuperMan pMan = (SuperMan) person;
    System.out.println(pMan.fly());
    
}
    
    
}

这样必然报错

 

 

 

 所以注意了啊。只要发生对象的向下转型之前,一定要首先发生向上转型,两个没有任何关系的实例如果要发生强制转换,那么就会出现异常。所以向下转型不一定安全呀

 转型之前要进行判断  判断某个实例是否是某个类的对象   使用 instanceof 进行

package com.toov5.Reordering;

class Person{
    public void print(){
        System.out.println("吃喝拉撒");
    }
}

class SuperMan extends Person{
    public String fly(){
        return "飞起来~~~";
    }
}

public class Test {
   public static void main(String[] args) {   
    Person person = new SuperMan();
    System.out.println(person instanceof Person);
    System.out.println(person instanceof SuperMan);
       
       
}
    
    
}

 

结果

 

如果要进行向下转型 最好要判断判断啊 老铁 别着急

所以这么玩儿

 

 转型之前要规范!!

public class Test {
   public static void main(String[] args) {   
    Person person = new SuperMan();
    if (person instanceof SuperMan) {
        SuperMan superMan =(SuperMan)person;
        System.out.println(superMan.fly());
    }
       
       
}
    
    
}

结果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值