Java 父类的引用指向子类对象有啥用 总结
1、
你可能会写如下2个方法
feed(Cat cat){ }
feed(Dog dog){ }
如果Cat、Dog都是Animal的子类,那你就可以写成
feed(Animal animal){ }
Animal a1=new Dog(); //父类引用指向子类对象
Animal a2=new Cat();
feed(a1);
feed(a2);
有人说这是面向接口编程,可以降低程序的耦合性,即调用者不必关心调用的是哪个对象,只需要针对接口编程就可以了,被调用者对于调用者是完全透明的。让你更关注父类能做什么,而不去关心子类是具体怎么做的,你可以随时替换一个子类,也就是随时替换一个具体实现,而不用修改其他.
2、
多态最主要的作用是增加代码的扩展性
比如最基本的一个方法 equals ,他是Object类的一个方法 完整写法是 public boolean equals(Object obj)
注意这里的参数类型使用的是Object 而Object又是所有类的父类,所以你在调用这个方法的时候,这个参数可以传入Object的子类对象--即任意对象,所以这个方法适用于任何对象
如果没有多态 这个方法就不能这么写,参数只能写一个具体的类,那么这个方法的适用范围就只是这一个类.......
3、
假设有一个Animal的父类,Dog、Cat子类
如果你在代码中,事先申请
private Animal an;
这样的好处是什么呢? An的实际类型在运行的时候才能具体确定,他可以是Dog Cat 或者Animal。因为你可以写:
an = new Animal();
也可以写:
an = new Dog();
或
an = new Cat(();
如果你一开始就申明了一个是Dog an; 那么你的an就只能是Dog 那么代码就不够灵活,以及的扩展的时候就不方便扩展。
当然,如果你确定an 只可能是DOG 不会为其它类型的时候,两种写法都是可以的。
Java 父类的引用指向子类对象有啥用 总结相关推荐
- Java多态-如何理解父类引用指向子类对象
java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是"向上转型". 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 C ...
- java父类引用子类_java多态,如何理解父类引用指向子类对象
要理解多态性,首先要知道什么是"向上转型". 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求 ...
- Java多态 父类引用指向子类对象
原文地址http://www.cnblogs.com/111testing/p/6880831.html Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 ...
- Java基础之父类引用指向子类对象
多态(Polymorphism) 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示, 多态的有点 消除类型之间的耦合关系 可替换性 可扩充 ...
- 关于java多态性之父类引用指向子类对象
在使用多态前,要确保两个类之间是继承关系 public class Animal{}public class Dog extends Animal{} 之后创建对象: Animal animal1 = ...
- java 父类引用指向子类对象---动态绑定
知识点: 1.java 中父类引用指向子类对象时动态绑定针对的只是子类重写的成员方法: 2.父类引用指向子类对象时,子类如果重写了父类的可重写方法(非private.非 final 方法),那么这个对 ...
- java 父类引用子类对象_java 父类引用指向子类对象
1. 无论是泛型还是普通父类引用指向子类对象,父类引用可见范围都是父类自己的变量或函数 2. 说明见注释 代码如下:父类 package com.atguigu.spring.beans; publi ...
- java子类引用指向父类对象_Java多态 父类引用指向子类对象
Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 然后看一个例子 输出结果为: 给出结论:Father c = new Child() 在c的 ...
- java 父类引用子类对象_java多态,如何理解父类引用指向子类对象
java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是"向上转型". 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 C ...
最新文章
- Spring Cloud Finchley版中Consul多实例注册的问题处理
- Java学习笔记13(equals()方法;toString()方法)
- 蓝桥杯java第七届决赛第四题--路径之谜
- antd vue 树更新数据后不展开_很全面的vue面试题总结
- [Java核心技术(卷I)] - Java中的参数能做什么和不能做什么
- 神奇的国际日期变更线
- pdo mysql 绑定查询_php mysql PDO 查询操作的实例详解
- 对位藏头诗 ——《集异璧之大成 》
- android 小米读写权限,Android 小米手机的权限问题
- setValue: forKey: 和 setValue: forKeyPath:
- 【掘金运营套路揭露】真心被掘金的套路....
- css style 命名,CSS_CSS样式命名规范,命名一直是个让我头痛的问题 - phpStudy
- md5解密算法 java_MD5算法解密java
- 鲍尔默评论谷歌退出中国事件
- mplab c30 注册方法
- java list clear 垃圾回收_java垃圾回收机制
- Android开发之漫漫长途 XII——Fragment详解
- Android Cursor的一些浅显见解
- html垂直居中vertical,利用vertical-align:middle垂直居中
- ABAP-1-会计凭证批量数据导入本地ACCESS
热门文章
- 干货 | 深度学习之卷积神经网络(CNN)的模型结构
- mysql 客户端简单搭建
- Ubuntu SSE指令集 编程实例---复数乘法与共轭乘法
- npm安装包报错,清除一下缓存
- element el-transfer穿梭框的使用,自定义穿梭框的数据项
- android 全景拍照 sdk,Android全景SDK | 百度地图API SDK
- 《高质量程序设计指南——C/C++语言》第1章 高质量软件开发之道
- Qt for IOS 制作APP启动页面
- 硬盘突然变raw格式_磁盘变成RAW格式的两种解决办法
- 一文彻底读懂三极管的工作原理,最通俗的解释,看完就明白了!