java之多态详解
前言
什么叫多态?多态就是一种事物可以有多种表现形式
多态三要素
1.被动方必须有继承关系
2.子类一般都要重写父类方法
3.必须将主动方的功能函数的参数设置为 被动方父类的类型
举个例子司机开车
假如说司机会开汽车 我们需要定义个汽车的类 然后在司机类中添加会开汽车的的方法
假如说司机会开卡车 我们需要再定义一个卡车的类 然后在司机类中添加会开卡车的方法下面看下传统的调用方式 代码如下:
class Car
{
private String name; //无参 构造方法
public Car(){}
// 有参构造方法
public Car(String name){
this.name = name;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void run(){}
} class Bus extends Car
{
public Bus(){}
public Bus(String name){
super(name);
}
public void run(){
System.out.println("公交车在跑");
}
} class SmallCar extends Car
{
public SmallCar(){}
public SmallCar(String name){
super(name);
}
public void run(){
System.out.println("小轿车在跑");
}
} class Drivers
{
//假如司机会开公交车
public void driverBus(Bus b){
b.run();
} //假如司机会开小轿车
public void driverSmallCar(SmallCar smcar){
smcar.run();
}
} class TestDt
{
public static void main(String[] args)
{
Drivers d = new Drivers(); //司机开公交车
d.driverBus(new Bus("公交车"));
d.driverSmallCar(new SmallCar("小轿车"));
}
}
正如上面的列子 在添加司机开其他的车 就会重复上面的行为 缺点是 扩展性比较差,后期代码维护困难。
然后我们用多态的写法优化上述例子 代码如下:
class Car
{
private String name; //无参 构造方法
public Car(){}
// 有参构造方法
public Car(String name){
this.name = name;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void run(){}
} class Bus extends Car
{
public Bus(){}
public Bus(String name){
super(name);
}
public void run(){
System.out.println("公交车在跑");
}
} class SmallCar extends Car
{
public SmallCar(){}
public SmallCar(String name){
super(name);
}
public void run(){
System.out.println("小轿车在跑");
}
} class Drivers
{
public void driverCar(Car car){
car.run();
}
} class TestDt
{
public static void main(String[] args)
{
Drivers d = new Drivers(); d.driverCar(new Bus("公交车"));
d.driverCar(new SmallCar("小轿车"));
}
}
比较第一种写法 假如司机还会开其他的车 只需要添加会开这种车的类就行 司机类不需要再添加其它功能方法 。代码简介 后期维护比较方便 这种编写多态的形式也叫向上转型。
但是要想调用子类独有的方法必须向下转型才能调用
java之多态详解的更多相关文章
- “全栈2019”Java第五十四章:多态详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java的泛型详解(一)
Java的泛型详解 泛型的好处 编写的代码可以被不同类型的对象所重用. 因为上面的一个优点,泛型也可以减少代码的编写. 泛型的使用 简单泛型类 public class Pair<T> { ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Java 序列化Serializable详解
Java 序列化Serializable详解(附详细例子) Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连 ...
- Java String类详解
Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...
- 最新java数组的详解
java中HashMap详解 http://alex09.iteye.com/blog/539545 总结: 1.就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java ...
- JAVA IO 类库详解
JAVA IO类库详解 一.InputStream类 1.表示字节输入流的所有类的超类,是一个抽象类. 2.类的方法 方法 参数 功能详述 InputStream 构造方法 available 如果用 ...
- 转:Java HashMap实现详解
Java HashMap实现详解 转:http://beyond99.blog.51cto.com/1469451/429789 1. HashMap概述: HashMap是基于哈希表的M ...
- 淘宝JAVA中间件Diamond详解(2)-原理介绍
淘宝JAVA中间件Diamond详解(二)---原理介绍 大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解.本次为大家带来的是diamond核心原理的介绍,主要包括server ...
随机推荐
- Spring Boot 文件上传原理
首先我们要知道什么是Spring Boot,这里简单说一下,Spring Boot可以看作是一个框架中的框架--->集成了各种框架,像security.jpa.data.cloud等等,它无须关 ...
- Django Middleware简介
1 前言 Django使用非常熟练了,各种API接口不在话下,全都搞定.为方便定位问题在每个API接口的的开始和返回的地方都加上了log打印,记录入参和返回值. 但是这样有一个问题,需要每个 ...
- 关于android studio 的高德配置
1.获得key 进入控制台,创建一个新应用.在创建的应用上点击"添加新Key"按钮,在弹出的对话框中,依次:输入应用名名称,选择绑定的服务为"Android平台SDK&q ...
- Css Secret 案例Demo全套
Css Secret 案例全套 github地址 案例地址 去年买了一本CSS揭秘的css专题书,该书揭示了 47 个鲜为人知的 CSS 技巧,主要内容包括背景与边框.形状. 视觉效果.字体排印.用户 ...
- GitHub起步---创建第一个项目
---恢复内容开始--- 刚起步学习GitHub,边学边说! {参考教程:http://blog.csdn.net/steven6977/article/details/10567719}这里描述的很 ...
- Solidity constant view pure关键字的区别与联系
在Solidity中constant.view.pure三个函数修饰词的作用是告诉编译器,函数不改变/不读取状态变量,这样函数执行就可以不消耗gas了(是完全不消耗!),因为不需要矿工来验证.所以用好 ...
- 进程优化工具Process Lasso Pro 8.4官方版+激活破解方法
Process Lasso是一款来自美国的系统进程优化工具,基于特殊算法动态调整进程的优先级别,通过合理的设置进程优先级来实现降低系统负担的功能.可有效避免蓝 屏.假死.进程停止响应.进程占用 CPU ...
- unix命令
最近需要用到一些Unix的东西 ,就学习了下这个东西,简单记录下命令,方便以后查询! 1. ls这是最基本的档案指令. ls 的意义为 "list",也就是将某一个目录或是某一个档 ...
- 搭建hadoop伪分布式环境
伪分布式就是只有一台机器,既是namenode又是datanode.一台阿里云服务器(centos)即可完成. Java环境 首先需要安装Java环境,下载jdk的安装包,解压到/usr/java/, ...
- 数据库 --> SQL Server 和 Oracle 以及 MySQL 区别
SQL Server 和 Oracle 以及 MySQL 区别 三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Oracle的定位和架构非 ...