多态的基本概念

多态:同一种事物表现出来的多种形态。

多态语法格式

格式为:父类类型的引用指向子类类型的对象。如下所示

Person person=new Worker();

多态的特点

(1)当父类类型的引用指向子类类型的对象时,可以直接访问父类独有的方法。
(2)当父类类型的引用指向子类类型的对象时,无法直接访问子类独有的方法,但可以通过强制类型转换访问。
(3)对于父子类都有的非静态方法,编译阶段调用父类的方法,运行阶段调用子类的方法(动态绑定)。
(4)对于父子类都有的静态方法,编译和运行阶段都调用父类的静态方法。

引用数据类型的转换

引用数据类型之间的转换有两种,一是自动类型转换,二是强制类型转换。自动类型转换是指由小转大,由子类转换为父类,也称作向上转换。强制类型转换是指由大转小,由父类转换为子类,也称作向下转换或者显示转换(因需加上需转换的类型)。如下所示

Worker w=new Worker();
Person p=w;//自动类型的转换
Person p=new Worker();
((Worker)p).work();//强制类型转换,work()是Worker独有的方法

强转的注意事项

(1)当引用变量强转为非指向对象类型的对象时,编译通过,运行时会出现类型转换异常(ClassCastException)。例如:

Person p=new Worker();//Worker,Dancer继承自Person类
((Dancer)p).dance();//强转为非指向对象的类型,出现异常

(2)为了避免该错误的放生,进行转换前可通过 if(引用变量 instanceof 数据类型)判断能否进行强转。例如:

if(p instanceof Dancer)((Dancer)p).dance();
elseSystem.out.Println("类型错误,无法进行强转");

多态的实际意义

意义:多态的意义在于屏蔽不同子类的差异性实现通用的编程带来不同的效果。例如,通过多态实现一个方法可将参数对象的特征打印出来,其中参数对象可以是不同的子类对象。
先定义Worker,Dancer类继承自Person类

public  class Person {public  void speak(){System.out.println("我是Person");}
}
public class Worker extends Person{@Overridepublic void speak() {//重写父类方法System.out.println("我是一个Worker");}
}
public class Dancer extends Person{@Overridepublic void speak() {//重写父类方法System.out.println("我是一个Dancer");}
}

最后是测试类

public class PersonTest {public static void speak(Person p){p.speak();}public static void main(String[] args) {//将不同子类对象作为形参PersonTest.speak(new Worker());PersonTest.speak(new Dancer());}
}

运行结果如下

Java中的多态概念与实际意义相关推荐

  1. java根据父类找子类_在java中实现多态时,可以通过父类变量引用子类的对象。_学小易找答案...

    [单选题]对于字符串s="java",下面哪个选项返回字符在字符串中'v'的位置( ). [简答题]汽车核保的主要内容 [判断题]在java中产生子类对象时,直接调用子类的构造方法 ...

  2. java中实现多态的机制

    多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性.在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度:今天我们再次 ...

  3. java中的多态_Java中的多态

    多态与HoFs 朋友们好久不见啊,最近笔者同时在写脚本型语言--JavaScript,和工业级的面向对象语言--Java. 在写代码的同时呢,也会思考这些语言的不同.今天就拿 Java 中的多态,来谈 ...

  4. 浅谈java中的多态

    浅谈java中的多态 学习了java一年的时间,这里对java的多态进行了一个总结,如有错误希望可以指出, 首先java的多态分为编译时的多态和运行时的多态,其中编译时的多态就是方法的重载(前期绑定) ...

  5. Java中的多态:什么是多态?

    Java中的多态:什么是多态? 多态性是面向对象编程的三大重要特征之一,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类 ...

  6. java中实现多态的机制是什么_java多态机制是什么

    java多态机制是什么 java中实现多态的机制是依靠父类或接口的引用指向子类.从而实现了一个对象多种形态的特性.其中父类的引用是在程序运行时动态的指向具体的实例,调用该引用的方法时,不是根据引用变量 ...

  7. 何为Java 中的多态?

    Java 中的多态一般分为两种:重写式多态和重载式多态. 重载式多态,也叫编译时多态.也就是说这种多态再编译时已经确定好了.重载大家都知道,方法名相同而参数列表不同的一组方法就是重载.在调用这种重载的 ...

  8. java多态 降低代码耦合性_深度分析:理解Java中的多态机制,一篇直接帮你掌握!...

    Java中的多态 1 多态是什么 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态.用白话来说,就是多个对象调用同一 ...

  9. Java中关于多态的理解

    Java中多态的理解 JAVA中的多态可以简单的理解为一种事物的多种形态,当然多态是在继承的基础上有重写才存在.(因为这篇文章是转载过来的,大部分地方持支持的态度,但也有一些地方存在个人态度,比如这里 ...

最新文章

  1. [20190130]删除tab$记录的恢复2.txt
  2. 几张图片总结我的2015年
  3. nginx 添加自定义头部信息
  4. wireshark 选择网络接口
  5. spring-security-oauth2注解详解
  6. 如何在 Apache 中为你的网站设置404页面
  7. python中扑克牌类设计_Python中的计数 Counter类
  8. 你真的会写二分查找吗
  9. 域名系统(DNS)概述
  10. Anaconda常用命令大全
  11. 金融评分卡项目—7.申请评分卡中的数据预处理和特征衍生
  12. 华工计算机工图答案,华南理工 网络画法几何及工程制图-课程习题集答案
  13. html flash 背景,使FLASH背景变透明的方法介绍
  14. django rest framework serializer 增加自定义字段
  15. Skype 8.34 Windows7-64bit Ubuntu 16.04安装试验
  16. oppo X907刷机包 COLOROS 1.0 正式版公布 安卓4.2.2
  17. 用null_blk工具来实现模拟分区块设备
  18. 什么是Oracle数据库伪列,ORA-00976: 此处不允许指定的伪列或运算符
  19. 企业流程篇--项目管理(七)
  20. 基于Arduino的多功能智能交通信号灯的设计与实现 ---------对盲人语音播报,红灯结束时铃声提醒,信号灯倒计时和闯红灯语音劝阻

热门文章

  1. OpenCart v2.3.x 变形金刚模板主题
  2. ClickHouse最版本源码编译(X86)
  3. 《TCP/IP 网络编程》笔记
  4. 代码随想录训练营day55
  5. java-php-python-ssm智能导诊系统计算机毕业设计
  6. css mix-blend,CSS mix-blend-mode 属性 | 菜鸟教程
  7. 台式机win10关闭fn热键_Win10系统怎么禁用f1-f12快捷键
  8. “他,程序猿,35岁,被劝退”:不要只懂代码,会说话,胜过10倍默默努力
  9. js将字符串转成日期格式,返回年月日
  10. python将多个txt文件导入一个excel的不同sheet中