多态中父类引用指向子类对象的一些问题的个人看法
2017-05-18 23:48
357 查看
父类引用指向子类对象:假设我有一个Animal类,和一个Dog类,则:Animal animal = new Dog();此为父类引用指向子类对象
1.为什么要用父类的引用指向子类的对象?
有句话我觉得很精辟:现在写的代码,被将来的代码调用,这都不算事。现在写的代码,能调用将来的代码,这才牛逼勒。
具体来说:假如有一个类,这个类需要实现吃各种水果的方法。那如果我们在类里面定义方法:
public void eat(Banana banana) { }
public void eat(Apple apple) { }
。。。。。。
这样就显得很麻烦,但要是我要是把这个方法写成: public void eat(Fruit fruit){} 这样只要继承Fruit或者实现Fruit接口,就都可以作为eat的参数。这样就简化了程序。
再比如:
写一个画图程序的时候,你想画方,画圆,画线。方,圆,线都属于Shape类型。那么就应该有
class Shape{}
class Fang extends Shape{}
class Yuan extends Shape{}
class Xian extends Shape{}
然后把他们画出来的方法在某个类里,这个方法接收一个图形,不管是什么样的形状,你只要给我一个图形,我就可以把它画出来,public void draw();
子类里面重写这个方法。如果你的参数定义成Shape s,那么就可以接受继承Shape的所有实际形状 public void draw(Shape s);这就实现了多态的概念。
2.这样做有什么意义?
子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特, 定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。
3为什么父类引用子类对象时,不能调用子类特有的方法?
比如说:
定义一个父类Animal,一个子类Bird,Bird有个独有的方法:飞行。我现在 Animal animal = new Bird (); 你要调用 animal.fly();这是不符合逻辑的,因为动物不是都会飞。这就要回归到问题2:定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。
4.这样做的好处是什么?
总的来说有三方面:一,实现多态。二,减小耦合。三,增加了程序的可移植性。
5.子类能覆盖父类的变量吗(父类引用指向子类对象时)?答案是不能
比如我在Animal中:int i =1; 在Dog中: int i = 1000 ;
然后 Animal animal = new Dog();
输出animal.i,结果为1.
1.为什么要用父类的引用指向子类的对象?
有句话我觉得很精辟:现在写的代码,被将来的代码调用,这都不算事。现在写的代码,能调用将来的代码,这才牛逼勒。
具体来说:假如有一个类,这个类需要实现吃各种水果的方法。那如果我们在类里面定义方法:
public void eat(Banana banana) { }
public void eat(Apple apple) { }
。。。。。。
这样就显得很麻烦,但要是我要是把这个方法写成: public void eat(Fruit fruit){} 这样只要继承Fruit或者实现Fruit接口,就都可以作为eat的参数。这样就简化了程序。
再比如:
写一个画图程序的时候,你想画方,画圆,画线。方,圆,线都属于Shape类型。那么就应该有
class Shape{}
class Fang extends Shape{}
class Yuan extends Shape{}
class Xian extends Shape{}
然后把他们画出来的方法在某个类里,这个方法接收一个图形,不管是什么样的形状,你只要给我一个图形,我就可以把它画出来,public void draw();
子类里面重写这个方法。如果你的参数定义成Shape s,那么就可以接受继承Shape的所有实际形状 public void draw(Shape s);这就实现了多态的概念。
2.这样做有什么意义?
子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特, 定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。
3为什么父类引用子类对象时,不能调用子类特有的方法?
比如说:
定义一个父类Animal,一个子类Bird,Bird有个独有的方法:飞行。我现在 Animal animal = new Bird (); 你要调用 animal.fly();这是不符合逻辑的,因为动物不是都会飞。这就要回归到问题2:定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。
4.这样做的好处是什么?
总的来说有三方面:一,实现多态。二,减小耦合。三,增加了程序的可移植性。
5.子类能覆盖父类的变量吗(父类引用指向子类对象时)?答案是不能
比如我在Animal中:int i =1; 在Dog中: int i = 1000 ;
然后 Animal animal = new Dog();
输出animal.i,结果为1.
相关文章推荐
- java基础整理——父类引用指向子类对象实体的多态
- java继承实质、父类引用指向子类对象(多态)、声明时类型、运行时类型
- 多态的三个条件: 1、要有继承 2、要有重写 3、父类引用指向子类对象----java
- Java中,父类引用指向子类对象的问题分析
- java 多态 父类引用指向子类对象
- java多态,如何理解父类引用指向子类对象
- 理解多态AND理解父类引用指向子类对象
- java学习笔记:java的多态,子类和父类的相互转换,父类引用指向子类的对象
- Java多态--父类引用指向子类对象
- java继承实质、父类引用指向子类对象(多态)、声明时类型、运行时类型
- 多态---父指针指向子类对象(父类引用指向子类对象)
- Java多态-如何理解父类引用指向子类对象
- java多态,如何理解父类引用指向子类对象
- 父类引用指向子类对象,多态
- JAVA基础 之 父类引用指向子类对象(多态)
- java中的多态-父类引用指向子类对象
- C++ 多态问题:为什么不直接用子类引用子类,而是用父类指针指向子类
- Java多态 父类引用指向子类对象
- C#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序
- 父类引用指向子类对象(Java中的多态)