Influenced by 《java 八荣八耻》,翻了下《java编程思想》

印象中多态产生的条件:1.子类继承父类 2.父类【指针】指向子类 3.父类引用调用重写(@Override)方法

  * 大家注意指针的这个字眼,如果方法是静态的话没有指针,多态是没法运作的,本质上多态产生条件就是一个【upcast】。

【回顾重载和重写】

1.@Override 子类对父类允许访问的方法  重写 。(异常:不能抛出比父类更多异常、访问修饰:不能更封闭)

  * 加了注解IDE会帮忙检查 方法名 + 参数列表 + 返回值是否一致。

  * 常见实现接口,接口本身是一种规范,我们要按规范去实现方法,【面向接口编程达到松耦合目的(spring的ioc控制反转依赖注入做到了)】

    正如接口是规范,返回值 + 方法名 + 参数列表  就要和规范一样了。

2.Overload 一个方法名字表达清晰,重载它!方法名一样,参数列表不同(甚至到子类去重载也可以)

【正题】

那多态怎么又和if else产生联系了呢?   待我实践后再来编辑~~~

【多态继承设计】组合 => 继承(继承需要在编译时知道类型)

【组合状态模式】状态改变 => 行为改变。

class Actor {
public void act() {}
} class HappyActor extends Actor { public void act() {
System.out.println("HappyActor");
} } class SadActor extends Actor { public void act() {
System.out.println("SadActor");
} } class Stage { private Actor actor = new HappyActor(); public void performPlay() {
actor.act();
} public void change() {
boolean isHappyActor = actor instanceof HappyActor;
actor = isHappyActor?new SadActor():new HappyActor();
} } public class Test {
public static void main(String[] args) {
Stage stage = new Stage();
for (int i = 0; i < 10; i++) {
stage.performPlay();
stage.change();
}
}
}

【By the way】

【判断对象具体类型】

【instanceof运算符号】

Object obj = new Object();
Object obj = new Foo();
boolean b = obj instanceof Foo;//true

【库方法】

public static boolean areTypesCompatible(Object expected, Object obj) {
  return Objects.requireNonNull(expected) .getClass() .isInstance(obj);
}

多态(upcast)减少分支判断 以及 多态继承设计、具体类型判断。的更多相关文章

  1. js对象类型判断工具

    对象类型判断工具 /** *类功能:对象类型判断工具 **/ var TypeUtil = { /** *方法说明:是否是数组 **/ isArray: function (obj) {//是否是数组 ...

  2. Swift4 类与继承, 类型转换, 类型判断

    创建: 2018/03/05 完成: 2018/03/07 更新: 2018/03/09 完善标题 [Swift4 类与继承, 类型转换] -> [Swift4 类与继承, 类型转换与判断] 补 ...

  3. Java基础进阶:多态与接口重点摘要,类和接口,接口特点,接口详解,多态详解,多态中的成员访问特点,多态的好处和弊端,多态的转型,多态存在的问题,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    多态与接口重点摘要 接口特点: 接口用interface修饰 interface 接口名{} 类实现接口用implements表示 class 类名 implements接口名{} 接口不能实例化,可 ...

  4. C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义

    类型判断符号: C#:object a;  if(a is int) { }  用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...

  5. 后盾网lavarel视频项目---3、lavarel中子控制器继承父控制器以判断是否登录

    后盾网lavarel视频项目---3.lavarel中子控制器继承父控制器以判断是否登录 一.总结 一句话总结: 在common控制器的构造方法中验证登录中间件,其它的控制器继承common控制器 p ...

  6. c#中判断类是否继承于泛型基类

    在c#中,有时候我们会编写类似这样的代码: public class a<T> { //具体类的实现 } public class b : a<string>{} 如果b继承a ...

  7. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开

    ASP.NET MVC Filters 4种默认过滤器的使用[附示例]   过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...

  8. Python3中的__new__方法以及继承不可变类型类的问题

    最近在学到Python中的__new__方法时被弄懵逼了,一开始实在是很难理解,有很多地方想不通(本人强迫症).最近自己慢慢思索得出了能说服自己的理解: 说__new__方法之前要先提到__init_ ...

  9. [改善Java代码]在equals中使用getClass进行类型判断

    建议47: 在equals中使用getClass进行类型判断 本节我们继续讨论覆写equals的问题.这次我们编写一个员工Employee类继承Person类,这很正常,员工也是人嘛,而且在JEE中J ...

随机推荐

  1. 一个ArrayList在循环过程中删除,会不会出问题,为什么?

    ArrayList中的remove方法(注意ArrayList中的remove有两个同名方法,只是入参不同,这里看的是入参为Object的remove方法)是怎么实现的: public boolean ...

  2. C# Winform窗体基础属性

    窗口样式: Inco:改图标样式: MaxmizeBox:true:显示右上角最大化按钮: MinmizeBox:true:显示右上角最小化按钮: ShowInco:true:显示左上角小图标: Sh ...

  3. 关于TSql

    1.Sql:结构化查询语言(Structrued  Query  Language) 2.TSql:是Sql语言的另一种版本,且只能在SqlServer中使用.和Sql不同的是,TSql中增加了对变量 ...

  4. linux提取第一列且删除第一行(awk函数)

    如下文件所示,只想提取红框中的内容,即进行提取第一列,且去除第一行的操作 则用到下列命令行: awk 'NR == 1 {next} {print $1}' file.txt > file_co ...

  5. 第十一节、Harris角点检测原理(附源码)

    OpenCV可以检测图像的主要特征,然后提取这些特征.使其成为图像描述符,这类似于人的眼睛和大脑.这些图像特征可作为图像搜索的数据库.此外,人们可以利用这些关键点将图像拼接起来,组成一个更大的图像,比 ...

  6. (贪心)nyoj448-寻找最大数

    题目描述: 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=92081346718538,m=10时,则新的最大数是9888 输入描述: 第一行输入一个正整数T,表示 ...

  7. (基础 输入方法 栈)P1427 小鱼的数字游戏 洛谷

    题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了).这对小鱼的 ...

  8. python自动化开发-[第二十三天]-初识爬虫

    今日概要: 1.爬汽车之家的新闻资讯 2.爬github和chouti 3.requests和beautifulsoup 4.轮询和长轮询 5.django request.POST和request. ...

  9. python类继承的重写和super

    给已经存在的类添加新的行为,继承是非常好的实现方式.但是如果要改变行为呢?比如在Python继承扩展内置类,我们的contact类只允许一个名字和一个邮箱,但是如果要对某些人增加电话号码呢?这里可以通 ...

  10. IDEA tomcat 部署WEB项目

    1. 2. 3.