多态(upcast)减少分支判断 以及 多态继承设计、具体类型判断。
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
【库方法】
多态(upcast)减少分支判断 以及 多态继承设计、具体类型判断。的更多相关文章
- js对象类型判断工具
对象类型判断工具 /** *类功能:对象类型判断工具 **/ var TypeUtil = { /** *方法说明:是否是数组 **/ isArray: function (obj) {//是否是数组 ...
- Swift4 类与继承, 类型转换, 类型判断
创建: 2018/03/05 完成: 2018/03/07 更新: 2018/03/09 完善标题 [Swift4 类与继承, 类型转换] -> [Swift4 类与继承, 类型转换与判断] 补 ...
- Java基础进阶:多态与接口重点摘要,类和接口,接口特点,接口详解,多态详解,多态中的成员访问特点,多态的好处和弊端,多态的转型,多态存在的问题,附重难点,代码实现源码,课堂笔记,课后扩展及答案
多态与接口重点摘要 接口特点: 接口用interface修饰 interface 接口名{} 类实现接口用implements表示 class 类名 implements接口名{} 接口不能实例化,可 ...
- C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义
类型判断符号: C#:object a; if(a is int) { } 用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...
- 后盾网lavarel视频项目---3、lavarel中子控制器继承父控制器以判断是否登录
后盾网lavarel视频项目---3.lavarel中子控制器继承父控制器以判断是否登录 一.总结 一句话总结: 在common控制器的构造方法中验证登录中间件,其它的控制器继承common控制器 p ...
- c#中判断类是否继承于泛型基类
在c#中,有时候我们会编写类似这样的代码: public class a<T> { //具体类的实现 } public class b : a<string>{} 如果b继承a ...
- ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开
ASP.NET MVC Filters 4种默认过滤器的使用[附示例] 过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...
- Python3中的__new__方法以及继承不可变类型类的问题
最近在学到Python中的__new__方法时被弄懵逼了,一开始实在是很难理解,有很多地方想不通(本人强迫症).最近自己慢慢思索得出了能说服自己的理解: 说__new__方法之前要先提到__init_ ...
- [改善Java代码]在equals中使用getClass进行类型判断
建议47: 在equals中使用getClass进行类型判断 本节我们继续讨论覆写equals的问题.这次我们编写一个员工Employee类继承Person类,这很正常,员工也是人嘛,而且在JEE中J ...
随机推荐
- centos7搭建ELK Cluster集群日志分析平台(二):Logstash
续 centos7搭建ELK Cluster集群日志分析平台(一) 已经安装完Elasticsearch 5.4 集群. 安装Logstash步骤 . 安装Java 8 官方说明:需要安装Java ...
- 如何在Windows 10上运行Docker和Kubernetes?
如何在Windows 10上运行Docker和Kubernetes? 在Windows上学习Docker和Kubernetes,开始的时候会让你觉得无从下手.最起码安装好这些软件都不是一件容易的事情. ...
- SourceInsight快捷键
下载安装与设置 https://blog.csdn.net/k346k346/article/details/77412413 常用设置总结的还是比较全面的 问题: SourceInsight4.0中 ...
- 关于数据结构,剑指offer上面的
我很喜欢那些javascript解决的编程题,感觉非常的有意思.我在博客园上面看到了一个同学的博客,他一共发了34篇剑指offer的编程题,还给出了非常详细的解答. 接下来的工作,我做的就是搬运工,不 ...
- POJ 3678 Katu Puzzle (2-SAT)
Katu Puzzle Time Limit: 1000MS ...
- bzoj4326 树链剖分 + 线段树 // 二分 lca + 树上差分
https://www.lydsy.com/JudgeOnline/problem.php?id=4326 题意:N个点的树上给M条树链,问去掉一条边的权值之后所有树链长度和的最大值最小是多少. 首先 ...
- stock
version: 1 disable_existing_loggers: False formatters: simple: format: "%(asctime)s - %(name)s ...
- 7、JPA-映射-双向一对多
一个用户对应多个订单,多个订单对应一个用户,不管查哪一边都可以得到另一边的信息 实体类 Customer package com.jpa.yingshe; import javax.persisten ...
- JAVA核心技术I---JAVA基础知识(抽象类和接口)
一:抽象类 (一)定义 类:属性(0或多个)+方法(0或多个)一个完整(健康)的类:所有的方法都有实现(方法体)类可以没有方法,但是有方法就肯定要有实现,这才是一个完整的类一个完整的类才可以被实例化, ...
- Windows Azure中国版试用
Winodws Azure刚出来那会都没怎么关注,就在一些网页新闻上见过一些报道,之前阿里云在博客里搞过推广,拿什么豆可以换,当时也就是看了一下没去用过. 有次在一群里别人说Windows Azure ...