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

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

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

【回顾重载和重写】

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

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

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

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

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

【正题】

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

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

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

  1. class Actor {
  2. public void act() {}
  3. }
  4.  
  5. class HappyActor extends Actor {
  6.  
  7. public void act() {
  8. System.out.println("HappyActor");
  9. }
  10.  
  11. }
  12.  
  13. class SadActor extends Actor {
  14.  
  15. public void act() {
  16. System.out.println("SadActor");
  17. }
  18.  
  19. }
  20.  
  21. class Stage {
  22.  
  23. private Actor actor = new HappyActor();
  24.  
  25. public void performPlay() {
  26. actor.act();
  27. }
  28.  
  29. public void change() {
  30. boolean isHappyActor = actor instanceof HappyActor;
  31. actor = isHappyActor?new SadActor():new HappyActor();
  32. }
  33.  
  34. }
  35.  
  36. public class Test {
  37. public static void main(String[] args) {
  38. Stage stage = new Stage();
  39. for (int i = 0; i < 10; i++) {
  40. stage.performPlay();
  41. stage.change();
  42. }
  43. }
  44. }

【By the way】

【判断对象具体类型】

【instanceof运算符号】

  1. Object obj = new Object();
  1. Object obj = new Foo();
  1. 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. LOJ#6283. 数列分块入门 7

    对于每个区间先乘在加,如果我修改的是部分的块,我就需要把现这个块的add和mul标记全部放下去,然后再更新. #include<map> #include<set> #incl ...

  2. bzoj3467: Crash和陶陶的游戏

    就一篇题解: BZOJ3467 : Crash和陶陶的游戏 - weixin_34248487的博客 - CSDN博客 1.离线,建出Atrie树:B树的倍增哈希数组,节点按照到根路径字典序排序 2. ...

  3. 【模板】2-SAT

    题目大意:给定 N 个点的 M 条约束,约束形式为:\(a_i \lor a_j = 1\). 题解:拆点什么的就不说了,在求出一组解的时候,考虑到 Tarjan 找环的过程中,scc 染色是按照拓扑 ...

  4. python与java的猜拳游戏

    python版: import randomprint("-----猜拳游戏-----")print("---0.剪刀--1.石头--2.布---")while ...

  5. GWAS研究可利用的数据库(持续更新)

    1.列表包括数据库名称.表型.是否能下载到基因型(genotype).是否能下载到GWAS结果文件(P值.效应值.SNP位点).目前收集到的有如下: 参考到这些数据库的文献:Genome-wide a ...

  6. pytest 3.fixture介绍一 conftest.py

    前言: 前面一篇pytest2 讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录, ...

  7. Failed to resolve: com.android.support:appcompat-v7:28 问题解决

    apply plugin: 'com.android.application' android { compileSdkVersion buildToolsVersion "28.0.2&q ...

  8. JS学习笔记Day2

    一.程序的三大结构 顺序结构:从上到下,从左到右依次执行每一条语句 选择结构:根据条件判断选择要执行的语句,出口只有一个 循环结构:满足一定条件,重复执行一段代码 二.选择结构 1.三元运算符:? : ...

  9. C#Windows服务程序安装常见问题解决方法

    C#Windows服务程序安装是如何的呢?让我们开始吧: C#Windows服务程序安装1. 在服务程序的是设计窗体中,点击右键“添加安装程序”,添加服务安装程序.否则,安装时会出现如下 错误: 正在 ...

  10. (链表 set) leetcode 817. Linked List Components

    We are given head, the head node of a linked list containing unique integer values. We are also give ...