父类引用指向子类对象

父类引用指向子类对象父类引用指向子类对象指的是 例如父类 Animal 子类 Cat Dog 其中 Animal 可以是类也可以是接口 Cat 和 Dog 是继承或实现 Animal 的子类 Animalanimal newCat 即声明的是父类 实际指向的是子类的一个对象 nbsp 那这么使用的优点是什么 为什么要这么用 可以用这几个关键词来概括 多态 动态链接 向上转型也有人说这是面向接口编程 可以降低

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

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

Animal animal = new Cat();

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

 

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

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

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

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

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

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

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

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

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

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

   

 

   对于多态,可以总结以下几点:

    一、使用父类类型的引用指向子类的对象; 
    二、该引用只能调用父类中定义的方法和变量; 
    三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用) 
    四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。 


 

另转载:

上面的示例也就是工厂模式的一个简单体现

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199797.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 下午12:11
下一篇 2026年3月20日 下午12:11


相关推荐

  • 算法复杂度比较「建议收藏」

    算法复杂度比较「建议收藏」常见函数算法时间复杂度由小到大依次为:Ο(1)<Ο(loga^n)<Ο(n)<Ο(nlogn)<Ο(n2)<Ο(n3)<Ο(n!)<Ο(N^n)常见算法复杂度对比快速排序nlogn堆排序nlogn冒泡排序在改良的冒泡下最优时间复杂度为n插入排序最优下n选择排序n*n归并nlogn对N个数进行排序,在各自最优条件下以下算法复杂度最…

    2025年7月22日
    5
  • jQuery+CSS3实现404背景动画特效

    效果:http://hovertree.com/texiao/jquery/74/源码下载:http://hovertree.com/h/bjaf/ko0gcgw5.htm效果图如下:代码如下:转自

    2021年12月26日
    55
  • Hive安装详细教程

    Hive安装详细教程一 Hive 安装 1 下载安装包 apache hive 3 1 1 bin tar gz 上传至 linux 系统 opt software 路径 2 解压软件 cd opt softwaretar zxvfapache hive 3 1 1 bin tar gz C opt module 3 修改系统环境变量 vi etc profile 添加内容 exportHIVE HOME opt module apache hive 3 1 1 binexportPAT PATH

    2026年2月19日
    2
  • 以太坊硬件钱包原理_以太坊区块链怎么挣钱

    以太坊硬件钱包原理_以太坊区块链怎么挣钱这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Mar

    2022年8月30日
    6
  • 88 核 +1.2TB/s 带宽:英伟达首发智能体 AI 处理器 Vera

    88 核 +1.2TB/s 带宽:英伟达首发智能体 AI 处理器 Vera

    2026年3月17日
    2
  • 文本域[通俗易懂]

    文本域[通俗易懂]<textarea>元素用来创建多行文本框。与其他input元素不同,<textarea>元素并非空元素,因此它包含起始标签和结束标签。

    2022年8月5日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号