前言

什么叫多态?多态就是一种事物可以有多种表现形式

多态三要素

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之多态详解的更多相关文章

  1. “全栈2019”Java第五十四章:多态详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. Java的泛型详解(一)

    Java的泛型详解 泛型的好处 编写的代码可以被不同类型的对象所重用. 因为上面的一个优点,泛型也可以减少代码的编写. 泛型的使用 简单泛型类 public class Pair<T> { ...

  3. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  4. Java 序列化Serializable详解

    Java 序列化Serializable详解(附详细例子) Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连 ...

  5. Java String类详解

    Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...

  6. 最新java数组的详解

    java中HashMap详解 http://alex09.iteye.com/blog/539545 总结: 1.就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java ...

  7. JAVA IO 类库详解

    JAVA IO类库详解 一.InputStream类 1.表示字节输入流的所有类的超类,是一个抽象类. 2.类的方法 方法 参数 功能详述 InputStream 构造方法 available 如果用 ...

  8. 转:Java HashMap实现详解

    Java HashMap实现详解 转:http://beyond99.blog.51cto.com/1469451/429789 1.    HashMap概述:    HashMap是基于哈希表的M ...

  9. 淘宝JAVA中间件Diamond详解(2)-原理介绍

    淘宝JAVA中间件Diamond详解(二)---原理介绍 大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解.本次为大家带来的是diamond核心原理的介绍,主要包括server ...

随机推荐

  1. java多线程的常见例子

    收藏 http://blog.csdn.net/wenzhi20102321/article/details/52524545

  2. [设计]GUI设计规范的规范

    1. 前言 很多著名的软件企业都有GUI设计规范,如 Apple 和 Google,得益于这些设计规范(或者叫指南),设计者才可以开发出符合平台视觉及交互要求的UI.其实除了这些大公司,软件公司都最好 ...

  3. c#抽取pdf文档标题(2)

    public class IETitle { public static List<WordInfo> WordsInfo = new List<WordInfo>(); pr ...

  4. ORACLE之莫名---ORA-02290: 违反检查约束条件

    最近碰到一个十分棘手的问题,Java程序插入空数据到oracle时报ORA-02290: 违反检查约束条件(XXXX.×××××),这明显是在设置不可为空的字段上插入为空内容导致,但是检查数据库表后发 ...

  5. 关于Web Audio API的入门

    Web Audio API提供了一个简单强大的机制来实现控制web应用程序的音频内容.它允许你开发复杂的混音,音效,平移以及更多. 可以先看一下MDN的这篇文章<Web Audio API的运用 ...

  6. View滑动的常见方式

    今天头条的面试官问起了实现View滑动的方式,其实前几天刚刚看过,但还是没能答上来,这里再来总结一遍. 1.使用scrollTo/scrollBy 为了实现View滑动,Android专门提供了这两个 ...

  7. Selenium学习资源和网站

    用于收集常用的网站和学习资源: 文章: Selenium私房菜系列--总章 WEB 自动化测试工具 Selenium 简介及其应用 Selenium教程 和我一起学 Selenium WebDrive ...

  8. 数据库学习笔记 4 强大的SQL

    其实这篇文章应该至少一个星期前就应该更新了,但是最近小猿我和喜欢了好多年的女神牵手成功,所以这些天有点飘. ---创建表结构 create table tablename ( id int, name ...

  9. python web开发-flask读取txt文件内容

    某些情况下,需要读取flask网站要目录下的txt文件.但是直接在flask网站的目录下创建一个文件是无法访问的.从网站找了一些资料,最终发现通过写一个方法返回txt内容比较简单方便,不过此方法适用于 ...

  10. 关于IM的一些思考与实践

    上一篇简单的实现了一个聊天网页,但这个太简单,消息全广播,没有用户认证和已读未读处理,主要的意义是走通了websocket-sharp做服务端的可能性.那么一个完整的IM还需要实现哪些部分? 一.发消 ...