黑马程序员技术交流社区
标题:
简单问题
[打印本页]
作者:
徐军涛
时间:
2012-11-7 17:37
标题:
简单问题
父类的引用指向子类对象的原理是什么?
作者:
古银平
时间:
2012-11-7 17:41
1,多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
2,多态的前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提:存在覆盖。
3,多态的好处
多态的出现大大的提高程序的扩展性。
4,多态的弊端:
虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。
在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
在多态中,静态成员函数的特点:
无论编译和运行,都参考做左边。
作者:
徐军涛
时间:
2012-11-7 18:06
讲得很好,父类引用可以
接收
子类对象;可是,父类的引用指向子类对象的
原理
是什么呢?
作者:
颜峰
时间:
2012-11-7 18:16
子类可以看成是特殊的父类,或者是父类的具体体现
就好像猫和动物的关系,子类是父类的一种
你可以让动物的引用指向猫,因为猫是一种动物
作者:
徐丹
时间:
2012-11-7 18:29
你好,给你举个简单的例子吧。类A,另外一个类B继承了类A。有如下代码:
A a = new B() ; 这就称父类的引用a 指向了子类的对象new B(),假如你的A是一个接口,或者抽象类,那么是不可以创建对象的,这样写就可以也能够它的引用去指向他子类或者实现类的对象。这句话写在这里感觉不明显。其实主要是用在方法的参数上,也就是多态性(java的三大特性之一,可想何等重要),为了让你理解深刻,我举个例子。
假如有一个类,这个类需要实现吃各种水果,有香蕉,苹果,梨子等等。
我们是不是就得写:
public void eat(Banana banana) { //.....}
public void eat(Apple apple) { //.....}
等等等等。这样是不是很麻烦啊,但是我要是把这个方法写成:
public void eat(Fruit fruit){//....}
这样只要继承Fruit或者实现Fruit接口,就都可以作为eat的参数,是不是大大简化了编程。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2