黑马程序员----多态

来源:互联网 发布:淘宝网韩版春装 编辑:程序博客网 时间:2024/05/22 03:29

问题点:如何具体理解父类的引用?     答:这个父类就是这个子类的另一种形态,可指向


多态的通俗理解:

说白了,一只猫过来了,可以说:“这猫好可爱”,也可以说“这小动物很可爱”,就是说猫具备了“猫 ”和 “动物”这两种形态,多态就这样理解!


动物 y = new 猫();  看到这样的现象就可以看做是多态的出现了!




多态的好处:

父类作为引用可以接受更多对象嘛。

父类引用子类对象建立方法,直接体验多态的好处,剩写了好多代码。

同时前期定义的代码可以使用后期的内容。


多态的弊端:

前期定义的内容不能使用(调用)后期子类的特有内容,打个比方:就是说猫这个对象,不能从动物这个类中拿到抓老鼠的方法,因为其它动物不一定具备嘛~~!

多态的前提:

1,必须有关系,继承,实现。

2,要有覆盖。(要实现方法,不然怎么搞?)


多态的转型:

用不了抓老鼠的功能了。专业说法:向上转型。

自动类型提升,猫对象提升了动物类型。那就不能按照猫的特有性质来操作了,就用动物的方式来操作吧!

限制对特有功能的访问(我操作共有的功能)

专业说法:向下转型

向下转型的目的是为了使用子类的特有方法。

报错!是小猫变成动物,又变成了小猫。

对于转型,自始至终都是子类对象在做着类型的变化。


毕老师和毕姥爷的故事:


注意都是子类对象在做着转换,别拿父类来搞,一下搞出异常来了!


这个传猫行!传个狗就编译通过,运行异常!


来个判断!instanceof 判断对象具体类型!只能用于引用数据类型判断

判断个Animal,传什么都能进!!!猫是不是动物?狗是不是动物?那不什么动物都能抓老鼠?


/*********************************/

覆盖只发生在函数上    

/*********************************/

————————————————————————————————————————————————————————————————————



多态时,
成员的特点:
1,成员变量。
编译时:参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败。
运行时:参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量。
简单说:编译和运行都参考等号的左边。哦了。
作为了解。(面试的时候用,谁他妈无聊在子父类中定义同样的变量?)



编译报错!比方:如果动物类不能吃饭,猫类能吃吗?猫可是动物的一种!动物不能吃!猫就不能吃!

2,成员函数(非静态)。
编译时:参考引用型变量所属的类中的是否有调用的函数。有,编译通过,没有,编译失败。
运行时:参考的是对象所属的类中是否有调用的函数。
简单说:编译看左边,运行看右边。


因为成员函数存在覆盖特性。



非静态的成员函数动态跟着对象绑定,静态的呢,就可以直接调用,以为着加载的时候静态就有所属类了!(静态函数不依赖对象了,Fu f = new Zi();  跟Zi类就关系!)

3,静态函数。
编译时:参考引用型变量所属的类中的是否有调用的静态方法。
运行时:参考引用型变量所属的类中的是否有调用的静态方法。
简单说,编译和运行都看左边。


其实对于静态方法,是不需要对象的。直接用类名调用即可。



多态中成员变量与静态函数  都是看左边,非成员函编译看左边,运行看右边。


0 0
原创粉丝点击