B站 韩顺平 笔记 (Day 10)

目录

1(多态polymorphic)

1.1(基本介绍)

1.2(多态的具体体现)

1.3(注意事项与细节)

1.3.1(细节1---向上转型)

1.3.1.1

1.3.1.3

1.3.2(细节2---向下转型)

1.3.3(细节3)

1.3.4(细节4)

1.4(练习题)

1.5(动态绑定机制)

1(多态polymorphic)

1.1(基本介绍)

1.2(多态的具体体现)

animal对象引用最开始指向的对象是Dog,当new一个猫之后,animal就指向了cat,所以运行类型就变成了猫

1.3(注意事项与细节)

1.3.1(细节1---向上转型)

1.3.1.1

父类的父类也是子类的父类

1.3.1.3

catchMouse是子类cat的特有成员,所以不可调用

1.3.2(细节2---向下转型)

(2)详解1.3.1.1图 --> animal原本指向cat(其目标类型的对象)(animal编译类型是animal但运行类型是cat,相当于是披着狼皮的羊,其本质就是cat),但是不能调用cat的特有成员catchMouse,所以将其向下转型成cat就可以访问catchMouse了。--> 下一句话Dog dog = (Dog) animal,就相当于让一个“猫”(animal)变成一只狗,这是不可能的,两个子类是没有任何关系的

1.3.3(细节3)

1.3.4(细节4)

public class detail_ {
    public static void main(String[] args) {
        BB bb = new BB();
        System.out.println(bb instanceof BB); //true
        System.out.println(bb instanceof AA); //true
        //aa 的编译类型是AA, 运行类型是BB
        AA aa = new BB();
        System.out.println(aa instanceof AA); //true
        System.out.println(aa instanceof BB); //true
        Object obj = new Object();
        System.out.println(obj instanceof AA); //false
        String str = "hallo";
        //System.out.println(str instanceof AA); //直接报错,二者无关
        System.out.println(str instanceof Object); //true
    }
}
class AA {} //父类
class BB extends AA {} //子类

1.4(练习题)

最后两行分析

  • b.count ---> 成员变量(属性)---> 看b的编译类型
  • b.display() ---> 成员方法 ---> 方法调用 ---> 看b的运行类型(看b实际指向哪个空间,b指向s,s指向sub)
  • 总结:属性(成员变量)不具备多态性,方法具备多态性

1.5(动态绑定机制)

java中超级无敌重要的的特性

首先:如图片简单看到可知,答案为40和30

然后:注释掉B中的sum和sum1,结果为什么呢?30和20

解释:a的编译类型是A,运行类型是B​​​​​​​

  1. 调a.sum(),先去看运行类型B,B类没有,所以去找父类A。A中有sum(),其return getI() + 10的getI()方法会和运行类型B绑定,(即:java的动态绑定机制因为a的运行机制是B,所以调用子类B的getI()方法),B的getI()返回属性i(属性没有动态绑定机制所以返回子类i的20)。所以return 的 getI() + 10 = 20 + 10 = 30。
  2. 调a.sum1(),先去看运行类型B,B类没有,所以去找父类A。A中有sum1(),其返回属性i + 10,属性没有动态绑定机制,所以结果是 10 + 10 = 20。
  3. 注:属性没有动态绑定机制,哪里声明就去哪里找,如果没有就继承机制去找。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值