1.多态的含义

什么是多态,就是一个事物有多种形态,比如说是老师是老师,他也是人,也是丈夫或者妻子,或者光棍儿,这就阐述了多种形态。

2.实现多态的三个前提条件

2.1.继承/实现  2.2.方法重写  2.3.向上转型。

3.多态的作用(即为好处)

提高了了程序的扩展性(在举例种具体体现在一个对象(Person类)中调用usingCar方法,不需要对每一个子类Car对象进行创建对象,即就算子类多几种Car类型,只用在测试类中和再创建一个子类即可。)。

4.多态的缺点

虽然提高了程序的扩展性,但是不能使用子类的特有功能。就只能进行向下转型进行访问子类特有方法。

5.多态的访问特点

成员方法:编译看左边,执行看右边。(即为编译的时候先看父类中是否有这个成员方法,运行时运行的是子类中的方法)。

成员变量:编译看左边,执行看左边。(即为编译的时候先看父类中是否有这个成员变量,运行时运行的是父类中的成员变量。

下面是案例;

1.先创建一个抽象父类AbstractCar(因为抽象类中有抽象方法,会必须要求子类重写抽象方法)

public abstract class AbstractCar {/*** 定义一个抽象方法*/public abstract void run(); //抽象方法,如果子类要继承,就要对抽象方法进行重写}

2.创建2个子类(BMWCar和ChanganCar)去继承父类。

public class BMWCar extends AbstractCar{public String name = "宝马"; //这里创建一个成员变量是为了验证访问成员变量的特点// 无参构造方法public BMWCar() {// TODO Auto-generated constructor stub}//成员变量的getXxx/setXxx方法public String getName() {return name;}public void setName(String name) {this.name = name;}/*** 要继承抽象类父类,就必须重写抽象类中父类的所有抽象方法*/public void run() {System.out.println("宝马车跑起来了。");}//子类独有的方法(普通方法)public void expensivePrice() {System.out.println("宝马车贵的一批");}
}

2.1子类ChanganCar类

public class ChanganCar extends AbstractCar{/*** 要继承抽象类,就必须重写抽象类父类中的所有抽象方法*/@Override public void run() {System.out.println("长安汽车跑起来了。");}// 子类特有方法(普通方法)public void character() {System.out.println("长安汽车性能一流,广告费结算一下。");      }
}

3.定义一个Person类对AbstractCar子类进行操作

下面代码中有个地方应该有很多看不明白,按照正常情况是按照我注释了的那种方式进行创建方法,但是这样会有一个问题,就是汽车品牌这么多,每一种品牌都需要单独的创建usingCar方法,这样会导致代码可读性差,而且代码冗余。所以利用多态的方式进行创建(将来如果有新的Car类只需要继承AbstractCar类,直接在测试类中创建对象就好了,就不需要再Person类中再次创建usingCar方法了。(不知道你们理解没?),反正子类要继承AbstractCar类,直接用多态进行接收就可以了,调用方法的时候还是会执行子类重写后的方法。

public class Person {/*** 定义一个方法 来输出car.run方法* 返回值类型:void* 参数 AbstractCar car*//*public void usingCar(BMWCar car) {//AbstractCar car = new BMWCar();实例化对象car.run();//成员方法.编译看左边(有没有run方法),执行看右边。}public void usingCar(ChanganCar car) {//AbstractCar car = new BMWCar();实例化对象car.run();//成员方法.编译看左边(有没有run方法),执行看右边。}*/// 如果使用多态的方式创建,就会简化创建子类对象代码public void usingCar(AbstractCar car) {//AbstractCar car = new BMWCar();实例化对象car.run();//成员方法.编译看左边(有没有run方法),执行看右边。}
}

4.测试类

public class AbstractTest {public static void main(String[] args) {/*** 创建一个person对象来调用自己的usingCar方法* usingCar方法中的参数为AbstractCar(抽象汽车)类*/Person p = new Person();AbstractCar bmwCar = new BMWCar();//使用多态的方式创建对象(实例化对象)//上面多态的方式创建对象 是将new BMWCar()赋值给AbstractCar类用对象名bmwCar接收//System.out.println(bmwCar.name);// //访问成员方法 编译执行都看左边 (父类中没有name这个成员变量,即使有的话,会执行父类中的成员变量)p.usingCar(bmwCar);/*** 如果需要调用子类中的特有方法,应该怎么办?* 这个时候就需要强制转换(向下转型);* 强制转换(向下转型)语法:* 数据类型 变量 = (数据类型)值/变量;* 在向下转型前,必须进行类型判断,需要判断当前父类变量中装的是哪一个子类类型对象。* if(父类变量名 instanceof 子类类型1){*强制转换格式:*子类类型1 子类变量 = (子类类型1)父类变量;*现在就可以调用子类的特有方法* }else if(父类变量 instanceof 子类类型1){* .....}* */// 要想获取子类的成员方法和成员变量需要向下转型才能进行调用//方式一if (bmwCar instanceof BMWCar) {BMWCar bmw = (BMWCar)bmwCar;bmw.stop();}else if (bmwCar instanceof ChanganCar) {ChanganCar changan = (ChanganCar)bmwCar;changan.character();}//方式二// getClass()方法返回字节码文件判断是否是VipZiuser1类型的对象if (bmwCar.getClass() == BMWCar.class) {BMWCar bmw = (BMWCar)bmwCar;bmw.stop();}else if (bmwCar.getClass() == ChanganCar.class) {ChanganCar changan = (ChanganCar)bmwCar;changan.character();}         }
}

可以细心的进行分析;

多态的含义、多态的作用及多态的详细代码实现相关推荐

  1. 【java基础18:方法覆盖与多态】什么时候使用方法覆盖 toString方法的覆盖 多态的基础语法与作用 向上/向下转型

    目录 方法覆盖Override 多态 方法覆盖Override 方法覆盖初体验,什么样的程序要方法覆盖 /*当前程序存在的问题(设计上的问题)??鸟儿在执行move()方法的时候,最好输出的结果是:& ...

  2. 深入浅出OOP(一): 多态和继承(早期绑定/编译时多态)

    在本系列中,我们以CodeProject上比较火的OOP系列博客为主,进行OOP深入浅出展现. 无论作为软件设计的高手.或者菜鸟,对于架构设计而言,均需要多次重构.取舍,以有利于整个软件项目的健康构建 ...

  3. java多态编译_关于java:编译时多态是否是这样的运行时多态?

    通过研究,我了解到: 重载,运算符重载和重载是我们所说的多态. 多态性意味着同一实体有时表现不同 例如: 参数 add(12, 13); add(12.2, 13.3); 相同实体(add())有时会 ...

  4. java多态的概念_Java基本概念:多态

    一.简介 描述: 多态性是面向对象编程中的一个重要特性,主要是用来实现动态联编的.换句话说,就是程序的最终状态只有在执行过程中才被决定,而非在编译期间就决定了.这对于大型系统来说能提高系统的灵活性和扩 ...

  5. JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例...

    JAVA之旅(八)--多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例 一.多态 我们今天又要学习一个新的概念了,就是多态,它是面向对象的第三个特征,何谓多态 ...

  6. 什么是多态?为什么要使用多态?什么时候用多态?多态是如何实现的?使用多态有什么好处?

      在学习<大话设计模式>的时候经常会遇到多态,但什么是多态?为什么要使用多态?什么时候用多态?多态是如何实现的?使用多态有什么好处?我们将根据以上五个问题展开激烈的讨论. 什么是多态? ...

  7. python封装继承多态_Python:封装、继承、多态、私有成员

    Python作为一种面向对象语言,也有着面向对象的三种特性:封装.继承.多态. 封装: 将事物相关的属性和方法封装在某一个类里面,使得在调用类创建实例时,可以不用关心类内部的实现细节. 类的本质: 1 ...

  8. android 混淆作用,Android开发之——Android 代码混淆(1)

    前言 在开始之前我们先看几个概念: 混淆 概念: 混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正 ...

  9. java中多态的作用,多态的好处,以及为什么要用多态?

    看了这个,我终于知道了为什么要用多态了 看了大量的资料和视频之后,我终于搞清了多态的作用了,废话不多说,直接上干货! 多态的好处: 1.提高了代码的可维护性 2.提高了代码的扩展性 多态的作用: 可以 ...

最新文章

  1. 美团点评基于MGR的CMDB高可用架构搭建之路
  2. Android:安卓APP启动过程简介
  3. 3. Qt Creator
  4. 海思Hi3516DV300 SDK首次安装以及编译问题的解决
  5. c#程序中使用like“查询access数据库查询为空的问题
  6. 带有Spring的REST的ETag
  7. Java排序算快速排序_Java排序算法 [快速排序]
  8. 在ARM Cortex-M上实现FreeRTOS性能计数器
  9. mysql5.6免安装乱码_mysql5.6乱码问题的几个注意
  10. 7-273 插入排序还是归并排序 (25 分)
  11. 其他转成十进制,十进制转其他进制
  12. Facebook 的 PHP 性能与扩展性
  13. 规划极限编程阅读笔记03
  14. mac快捷键:轻松提升mac使用效率
  15. 二分查找时间复杂度及其Python实现
  16. 按哪个键进入BIOS设置
  17. uni-app学习 form表单(五)
  18. 单片机应用编程技巧100问
  19. LintCode 木材加工
  20. Win11关闭代理白名单 小猫咪关闭远程解析功能

热门文章

  1. php think-queue队列的安装使用和Supervisor的安装配置和使用
  2. 桌面右击没有WPS新建WORD文档
  3. MySQL数据库使用命令行备份|MySQL数据库备份命令
  4. 解决:“由于可能不会将凭据发送到远程计算机,因此将不会进行连接。若要获得协助,请与您的系统管理员联系”
  5. 计算机类部分核心期刊投稿经验
  6. SEO优化怎么提升网站排名
  7. SAP JCo应用方案
  8. lcd1602液晶显示器
  9. oracle查询某个用户下所有表记录总数
  10. V-for and slot-scoped报错问题