Java 多态


同一种事物由于条件不同,展示出不同的结果,叫做多态。

父类的引用类型,由于使用不同的子类对象实例,而执行不同的操作。

多态存在的三个必要条件

1. 子类继承父类;

2. 子类重写父类方法;

3. 父类引用指向子类对象。 //保证了同一个父类引用类型,使用不同的子类对象实例

比如:

People p=new Chinese();  p.say();

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法

以下是多态实例演示:

 public class Test {
     public static void main(String[] args) {
         Person per=new Person();
         per.print( new B_And_W_Printer());//多态
         per.print( new ColorPrinter());//多态
     }
 
abstract class Printer { public abstract void print(); } class B_And_W_Printer extends Printer { //重写父类方法 public void print() { System.out.println("黑白打印机打印黑白内容"); } class ColorPrinter extends Printer { //重写父类方法 public void print() { System.out.println("彩色打印机打印彩色内容"); } } class Person { public void print(Printer p){ p.print(); } }

执行以上程序,输出结果为:

黑白打印机打印黑白内容
彩色打印机打印彩色内容

Java 父子类转型

⒈ 向上转型:子类转成父类,自动转换

 Person p= new Chinese();

特点:

  • 绝对安全(不会出错)。
  • 子类独有的属性和方法将会丢失,只能调用父类中存在的属性和方法。

如果父类方法不是抽象方法,那调用时,执行的方法体依旧是子类的。

  • 典型应用: 多态中父类引用指向子类对象

⒉ 向下转型: 父类转成子类,强制转换

Person() p=new Person();

Chinese c=(Chinese) p; //ClassCastException 类转换异常,因为p不是Chinese的实例化 对象,强转会造成类转换异常
Person() p=new English();

Chinese c=(Chinese) p; //ClassCastException 类转换异常,因为p不是Chinese的实例化对象,强转会造成类转换异常
Person() p=new Chinese();

Chinese c=(Chinese) p; /因为p是Chinese的实例化对象,可以强制转换

特点:不安全,会造成 ClassCastException 类转换异常,可使用instanceof提前判断

if (p instanceof Chinese){

   Chinese c=(Chinese) p ;

}

java中类的三大特征之多态的更多相关文章

  1. Java的OOP三大特征之一——多态

    OOP(面对对象)三大特征之一——多态 What:多态性是指允许不同类的对象对同一消息作出响应,多态性包括参数化多态性和包含多态性,多态性语言具有灵活.抽象.行为共享.代码共享的优势,很好的解决了应用 ...

  2. Java面向对象的三大特征

    Java面向对象的三大特征 java面向对象的三大特征:“封装.继承.多态”.更多Java技术知识,请登陆疯狂软件教育官网.微信搜索微信号:疯狂软件,参加2015年优惠活动,有机会获得优惠劵和代金劵. ...

  3. Java中面向对象三大特征

    也就是说在这里"人"是多态的, 在不同的形态时,特征行为是不一样的, 这里的"人", 同时有两种形态,一种是教师形态,一种是学生形态,所对应的特征行为分别是&q ...

  4. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  5. Java面向对象的三大特征和五大原则

    Java面向对象的三大特征 封装 封装(Encapsulation)是指属性私有化,根据需要提供setter和getter方法来访问属性.即隐藏具体属性和实现细节,仅对外开放接口,控制程序中属性的访问 ...

  6. Java的OOP三大特征之一——继承

    Java的OOP三大特征之一——继承 子类继承父类的特征和行为(属性和方法),使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类 ...

  7. JAVA:类的三大特征,抽象类,接口,final关键字<3>

    一.类的三大特征 1.封装性 (1).什么是封装 封装就是把抽象出的数据和对数据的操作封装在一起, 数据被保护在内部, 程序的其他部分只有通过被授权的操作(成员方法), 才能对数据进行操作. (2). ...

  8. JAVA基础之——三大特征、接口和抽象类区别、重载和重写区别、==和equals区别、JAVA自动装箱和拆箱

    1 java三大特征 1)封装:即class,把一类实体定义成类,该类有变量和方法. 2)继承:从已有的父类中派生出子类,子类实现父类的抽象方法. 3)多态:通过父类对象可以引用不同的子类,从而实现不 ...

  9. Java的OOP三大特征之一——封装

    面向对象三大特征之一 封装  继承  多态   封装性就是把类(对象)的属性和行为结合成一个独立的相同单位,并尽可能隐蔽类(对象)的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系. ...

随机推荐

  1. Hive数据仓库笔记(一)

    Hive建表: CREATE TABLE records (year STRING,temperature INT, quality INT) ROW FORMAT DELIMITED FIELDS ...

  2. PostGis常用函数中文介绍

    记录常用PostGis常用函数: 1.OGC标准函数 管理函数: 添加几何字段 AddGeometryColumn(, , , , , ) 删除几何字段 DropGeometryColumn(, , ...

  3. c++代码的编译

    1.gcc和g++     1.1搞清楚几个名字         GCC :GNU Compiler Collection (GUN编译套件),可以编译c,c++,java,objective-c,F ...

  4. springboot集成swagger2

    介绍:        Swagger是全球最大的OpenAPI规范(OAS)API开发工具框架,支持从设计和文档到测试和部署的整个API生命周期的开发.(摘自Swagger官网)Swagger说白了就 ...

  5. spring 文件模板下载多种实现方式

    针对于文件的下载,我们有很多种实现方式.业务场景是这样子的,要实现Excel文件的导入和导出功能,问题对于java的POI操作没有问题,所以实现文件的下载就相对简单,只需要从数据库取出相关的数据,针对 ...

  6. thinkphp5多图上传 js部分

    在项目中常会用到多图上上传,那就需要多图上传后需要预览,并且能删掉传错(不想传)的图,然而 测试了半天 并不知道jq怎么写,parent()parents()用了半天无果,罢了,还是用原生js来写.这 ...

  7. 通过jersey-client客户端调用Jersey的Web服务模拟CURD

    一.总体说明 通过jersey-client接口,创建客户端程序,来调用Jersey实现的RESTful服务,实现增.删.改.查等操作. 服务端主要是通过内存的方式,来模拟用户的增加.删除.修改.查询 ...

  8. 0x02 译文:Windows桌面应用Win32第一个程序

    本节课我们将用C++ 写一个最简单的Windows 程序. 目录: 创建一个窗口 窗口消息 编写窗口过程 绘制窗口 关闭窗口 管理应用程序状态 代码如下: #ifndef UNICODE #defin ...

  9. 多线程使用Lock实现生产者实现者代码

    package cn.com.servyou.qysdsjx.thread; import java.util.ArrayList; import java.util.List; import jav ...

  10. Hook 无侵入式埋点(页面统计)

    一.技术原理 Method-Swizzling 黑魔法 方法交换(不懂的可以查) 二.页面统计 某盟页面统计SDK需要开发者在APP基类里实现ViewDidAppear和viewDidDisappea ...