chapter08-面向对象编程——(多态polymorphic)——day09

目录

306-养宠物引出多态

307-方法的多态

308-对象的多态

309-多态快速入门

310-多态向上转型

311-多态向下转型

312-属性重写问题

313-多态课堂练习1

314-多态课堂练习2

315-JAVA的动态绑定机制(非常非常重要)

316-多态数组1

317-多态数组2

318-多态参数


306-养宠物引出多态

307-方法的多态

1、方法重载体现多态

2、方法重写体现多态(父类和子类各有一个say方法)

308-对象的多态

等号左边是编译类型;等号右边是运行类型

编译类型不改变,运行类型可以改变

编译类型不变,运行类型可以指向不同的,指向Dog/Cat

309-多态快速入门

310-多态向上转型

可以调用父类中所有成员;不能调用子类中特有成员

编译阶段,看左边编译类型,编译的时候编译的是animal属性,animal没有catchmouse方法

运行阶段,看右边运行类型,现在本类找有没有这个方法,再去父类找

311-多态向下转型

就是原来ainimal指向的是子类Cat,强转只能转成cat,而不能转成dog这些

312-属性重写问题

1、属性没有重写之说,属性的值看编译类型,就是等号左边

2、instance of 判断的右边的运行类型,是否是xx类型或xx类型的子类型

313-多态课堂练习1

314-多态课堂练习2

两个指的是一个地方,要记住 b==s

public class PolyExercise02主类
public static void main(String]args){
Sub s = new Sub();
System.out.println(s.count); //20看左边编译类型
s.display(); //20 运行类型
Base b = s; //向上转型
System.out.println(b == s); // true 
System.out.println(b.count);// 10,等式左边编译类型
b.display(); // 20,等式右边运行类型
}
}

315-JAVA的动态绑定机制(非常非常重要)

方法,会和该对象的内存地址/运行类型绑定

属性,没有动态绑定机制

方法,会和该对象的内存地址/运行类型绑定,所以getI()+10,这里是用的是运行类型的getI()方法,得到的是20这个值

属性,没有动态绑定机制,这里i+10,i找的是当前类,也就是父类中的i=10

316-多态数组1

person[i]的编译类型是person,运行类型是根据实际情况→JVM来判断

317-多态数组2

老师特有方法

学生特有方法

如何调用特有方法???

先判断运行类型,然后强制向下转型,就能调用特有方法了

if(person[i] instanceof Student){
    ((Student)persons[i]).study();  //强制向下转型
}

318-多态参数

使用了动态绑定机制,各自走各自的方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值