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 ...
随机推荐
- 如何实现类似Oracle中的家族树功能
先来设计一下表结构: create table city(id varchar(3) , pid varchar(3) , name varchar(10)); 下面我们造几条测试数据: INSERT ...
- JavaScript 数组基础知识
// Array 类型: // 检测数组: // console.log(myarr instanceof Array) //true // toString()方法会返回由数组中每个值的字符串形式拼 ...
- WordPress彩色背景标签云实现
网上有很多的这种效果,但是却几乎没有什么关于彩色背景标签云的教程,网上讲的基本都是让标签云的字体变成彩色而不是背景,我觉得让字体变成彩色有的标签会看不清楚,而且也没有让背景变成彩色好看.先看看效果: ...
- VM及centOS系统安装
虚拟机安装linux及配置
- Git分支(3/5) -- 禁用 Fast Forward 合并
添加一个分支, 并且换到该分支: git checkout -b add-text 然后我再index.html里面添加点文字, 并commit. 然后再修改README.md, 添加文字, comm ...
- Linux-CentOS7下安装mysql5.6常见问题解决!
第一次写博客,写的不好请大家多见谅!有遇到问题可以评论到下方,我会抽空帮大家解决!! 下载MySQL-5.6.tar安装包(包含server,client等) 首先用root用户将MySQL-5.6. ...
- 以太坊挖矿源码:ethash算法
本文具体分析以太坊的共识算法之一:实现了POW的以太坊共识引擎ethash. 关键字:ethash,共识算法,pow,Dagger Hashimoto,ASIC,struct{},nonce,FNV ...
- Node.JS开发环境准备
1.安装Nodejs的Windows包. 官网:http://nodejs.org/ 2.可以使用cmd运行nodejs项目,命令格式: node 文件名.js node 文件名 3.对于不熟悉的 ...
- 关于Maven的配置与学习
1. 简介 官方说法:Apache Maven is a software project management and comprehension tool. Based on the concep ...
- 浅析Python多线程
学习Python多线程的资料很多,吐槽Python多线程的博客也不少.本文主要介绍Python多线程实际应用,且假设读者已经了解多线程的基本概念.如果读者对进程线程概念不甚了解,可参见知名博主 阮一峰 ...