关闭

父类引用指向子类对象

91人阅读 评论(0) 收藏 举报

http://blog.csdn.net/kaiwii/article/details/8042488

父类引用指向子类对象指的是:

例如父类Animal,子类Cat,Dog。其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类。

Animal animal = new Cat();

即声明的是父类,实际指向的是子类的一个对象。

那这么使用的优点是什么,为什么要这么用?可以用这几个关键词来概括:多态、动态链接,向上转型

也有人说这是面向接口编程,可以降低程序的耦合性,即调用者不必关心调用的是哪个对象,只需要针对接口编程就可以了,被调用者对于调用者是完全透明的。让你更关注父类能做什么,而不去关心子类是具体怎么做的,你可以随时替换一个子类,也就是随时替换一个具体实现,而不用修改其他.

以后结合设计模式(如工厂模式,代理模式)和反射机制可能有更深理解。

下面介绍java的多态性和其中的动态链接,向上转型:

面向对象的三个特征:封装、继承和多态;

封装隐藏了类的内部实现机制,可以在不影响使用者的前提下修改类的内部结构,同时保护了数据;

继承是为了重用父类代码,子类继承父类就拥有了父类的成员。

方法的重写、重载与动态连接构成多态性。Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关系也给C++开发者带来了更大的麻烦,为了规避风险,Java只允许单继承,派生类与基类间有IS-A的关系(即“猫”is a “动物”)。这样做虽然保证了继承关系的简单明了,但是势必在功能上有很大的限制,所以,Java引入了多态性的概念以弥补这点的不足,此外,抽象类和接口也是解决单继承规定限制的重要手段。同时,多态也是面向对象编程的精髓所在。

理解多态,首先要知道“向上转型”。

我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类。我可以通过

Cat c = new Cat();
实例化一个Cat的对象,这个不难理解。但当我这样定义时:

Animal a = new Cat();
这代表什么意思呢?

很简单,它表示我定义了一个Animal类型的引用,指向新建的Cat类型的对象。由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的。这就是“向上转型”。

那么这样做有什么意义呢?因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特, 定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。 所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,父类引用是无法调用的;

那什么是动态链接呢?当父类中的一个方法只有在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用; 对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。

下面看一下典型的多态例子:

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

从对象的内存角度来理解“父类的引用指向子类的对象”

 多态中总不理解Father f = new Son()是怎么引用子类对象的,现在从从对象的内存角度来理解试试. 假设现在有一个父类Father,它里面的变量需要占用1M内存....
  • huiyuanphe
  • huiyuanphe
  • 2015-12-29 22:47
  • 1113

java继承实质、父类引用指向子类对象(多态)、声明时类型、运行时类型

继承是面向对象的三大特征(封装、继承和多态)之一,也是java语言的重要特性。 那么,继承父类的成员变量和继承父类的方法有什么区别吗?答案是肯定的。有的人甚至都不知道这个问题的存在。 继承成员变量...
  • xuejingfu1
  • xuejingfu1
  • 2016-05-25 12:36
  • 1560

多态的理解(父类引用指向子类对象)

多态:要有继承,方法的重写,父类引用指向子类对象           ?疑问:Animal cat = new Cat(); //向上转型。      ...
  • sinat_18882775
  • sinat_18882775
  • 2015-12-02 23:15
  • 3911

父类引用指向子类对象

  • 2012-11-24 15:59
  • 3KB
  • 下载

java多态性详解——父类引用子类对象

  • 2012-05-01 17:45
  • 38KB
  • 下载

父类引用指向子类对象属性值

父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog。其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类。 Animal animal = new...
  • xingxiupaioxue
  • xingxiupaioxue
  • 2017-04-13 00:51
  • 774

关于父类引用指向子类对象(A a = New B();)的使用,理解向上转型

首先什么是向上转型?       向上转型是JAVA中的一种调用方式,是多态的一种表现。向上转型并非是将B自动向上转型为A的对象,相反它是从另一种角度去理解向上两字的:它是对A的对象的方法的扩充,即A...
  • gh2391292
  • gh2391292
  • 2017-07-05 13:50
  • 300

java基础整理——父类引用指向子类对象实体的多态

在我学习多态的过程中,我碰见父类对象引用指向子类对象实体的情况, Father obj = new Son(); 为此,我对于其调用哪些方法以及的其具体的结构产生的一些疑问, 下面是我的一些看法。 ...
  • lizewenhh
  • lizewenhh
  • 2015-05-29 12:46
  • 445

Java 中深层理解父类引用指向子类对象

从对象的内存角度来理解试试. 假设现在有一个父类Father,它里面的变量需要占用1M内存.有一个它的子类Son,它里面的变量需要占用0.5M内存. 现在通过代码来看看内存的分配情况:Father...
  • Frank_Jay
  • Frank_Jay
  • 2015-10-12 21:44
  • 517

java多态性,父类引用指向子类对象

父类引用指向子类对象指的是:例如父类Animal,子类Cat,Dog。其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类。Animal animal = new Cat...
  • tianyan5
  • tianyan5
  • 2015-09-05 13:32
  • 357
    个人资料
    • 访问:54889次
    • 积分:1174
    • 等级:
    • 排名:千里之外
    • 原创:54篇
    • 转载:69篇
    • 译文:0篇
    • 评论:10条
    最新评论