面向对象特征之——多态

生活中的多态:一个事物有多种称呼

程序中的多态:父类的类型 引用子类的对象。

//创建一个Person对象,用一个引用类型引用这个对象

//引用类型是Animal 是Person的父类 ,引用的是子类Person的对象

//多态

Animal p = new Person();

//多态

Object p2 = new Person();

 多态体现了对象类型的灵活性

多态写法的注意事项

1. 多态的写法,只能调用父类的方法,不能调用子类独有的方法。

在编译期,编译器认为这个对象是引用的类型的对象;在运行期,就是实际的对象

 //在编译期系统认为,这个对象是Animal类型,如果调用 Person独有的方法,编译不同过

//在运行期执行的方法 就是实际对象执行的方法

Animal p = new Person();

//错误

p.showInfo();

//Person对象的eat方法,也就是重写的方法

p.eat();

 2. 多态的写法,如果调用子类独有的方法,对对象进行类型转换,转换成子类的类型

//创建一个Person对象,用一个引用类型引用这个对象

//引用类型是Animal 是Person的父类 ,引用的是子类Person的对象

Animal p = new Person();

//编译期通过 Person person = (Person)p;

person.showInfo();

//编译期通过

((Person)p).showInfo();

转型有风险,可能会出现转型异常。向上转型是没问题的,其他情况出现ClassCastException 

3. 使用instanceof关键字 获得某个对象是否是属于某个类型的,如果属于则转型,否则不转型,避免转型异常 的发生

语法:

        对象 instanceof 类型

                返回true/false

4. instanceof 应用 

public class LianHuan {
    //中国人、英国人、印度人表演节目
    public void play(Person p) {
        if(p instanceof Chinese) {
            Chinese c = (Chinese)p;
            c.kongfu();
        }
        if(p instanceof English) {
            English e = (English)p;
            e.dance();
        }
        if(p instanceof India) {
            India i = (India)p;
            i.motuo();
        }
    }
    public static void main(String[] args) {
        Chinese c = new Chinese();
        English e = new English();
        India i = new India();
        LianHuan lianhuan = new LianHuan();
        lianhuan.play(c);
        lianhuan.play(e);
        lianhuan.play(i);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aigo-2021

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值