java中多态_java之多态

java中多态_java之多态1.多态的概述:是面向对象的三大特性之一,封装、继承、多态。①一个具体的对象有多种形态,老虎既属于猫科动物(因为子父类是相对的,所以猫科动物也可以看做子类),又属于哺乳动物,所以老虎既可以拥有猫科动物的属性,又有哺乳动物的属性。②Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。普通类与普通类,抽象…

大家好,又见面了,我是你们的朋友全栈君。

1.多态的概述:是面向对象的三大特性之一,封装、继承、多态。

①一个具体的对象有多种形态,老虎既属于猫科动物(因为子父类是相对的,所以猫科动物也可以看做子类),又属于哺乳动物,所以老虎既可以拥有猫科动物的属性,又有哺乳动物的属性。

②Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。

普通类与普通类,抽象类与抽象继承类,接口与接口实现类。

ae88748d31f58d5a29f19a5aaa3c6d96.png

多态中成员变量和成员方法的变化

9c9c2edf83e20b7cb5daa316493ddda5.png

成员变量  编译和运行都参考等号的左边。编译运行看左边

成员方法(非静态方法)  编译看左边,运行看右边。

静态方法   编译看左边,运行看左边(父类的)

注:多态创建对象与普通类创建对象对成员变量和成员方法的调用互不影响。

多态中创建的对象,在调用成员变量时,必须是父类中具备的,调用成员方法时,必须是父类具备的,但实际调用时是子类的方法。

3.instanceof关键字,返回值是布尔类型true false。比如:父类A,子类B,子类C,B和C是A的子类,当父类类型A  变量名=new 子类类型B();用instanceof检测是否属于A或B时,返回值是TRUE,当检测是否属于C时,返回值是False。但检测A/B/C以外 的类时,编译不成功。

多态的转型

bdc78c63f0cb49e5569213c59ee89fb2.png

1 父类类型 变量名 = new子类类型();2 如:Person p = new Student();

①多态对象的创建,就是向上转型的过程。此时使用的时父类类型的成员变量(隐藏了子类类型),可以调用各个子类的具体的方法(父类中具有的方法),但不能使用子类中特有的方法。

向上转型用于,父类方法的具体实现,或者使用子类相同方法的不同方法体时。

1 子类类型 变量名 =(子类类型) 父类类型的变量;2 如:Student stu = (Student) p; //变量p 实际上指向Student对象

3 此时可以使用子类的方法和子类的属性

②向下转型的前提是向上转型,所以使用instanceof 判断具体的对象是否属于父类,再进行向下转型。

向下转型,用于使用子类特有的方法。,当提供的对象属于父类对象,但要使用子类特殊的方法时,向下转型。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 //描述动物类,并抽取共性eat方法

2 abstract classAnimal {3 abstract voideat();4 }5

6 //描述狗类,继承动物类,重写eat方法,增加lookHome方法

7 classDog extends Animal {8 voideat() {9 System.out.println(“啃骨头”);10 }11

12 voidlookHome() {13 System.out.println(“看家”);14 }15 }16

17 //描述猫类,继承动物类,重写eat方法,增加catchMouse方法

18 classCat extends Animal {19 voideat() {20 System.out.println(“吃鱼”);21 }22

23 voidcatchMouse() {24 System.out.println(“抓老鼠”);25 }26 }27

28 public classTest {29 public static voidmain(String[] args) {30 Animal a = new Dog(); //多态形式,创建一个狗对象

31 a.eat(); //调用对象中的方法,会执行狗类中的eat方法32 //a.lookHome();//使用Dog类特有的方法,需要向下转型,不能直接使用33

34 //为了使用狗类的lookHome方法,需要向下转型35 //向下转型过程中,可能会发生类型转换的错误,即ClassCastException异常36 //那么,在转之前需要做健壮性判断

37 if( !a instanceof Dog){ //判断当前对象是否是Dog类型

38 System.out.println(“类型不匹配,不能转换”);39 return; //返回最开始调用的地方main

40 }41 Dog d = (Dog) a; //向下转型

42 d.lookHome();//调用狗类的lookHome方法

43 }44 }

View Code

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156905.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 小程序“成语猜题”部分答案,总共28667题

    小程序“成语猜题”部分答案,总共28667题哀哀父母 可哀呀可哀,我的父母啊!原指古时在暴政下人民终年在外服劳役,对父母病痛、老死不能照料而悲哀。 哀哀欲绝 绝:断气,死。形容极其悲痛。 哀兵必胜 原意是力量相当的两军对阵,悲愤的一方获得胜利。后指受欺侮而奋起抵抗的军队,必定能取胜。 哀而不伤 哀:悲哀;伤:伤害。忧愁而不悲伤。比喻做事没有过头也无不及。 哀感天地 形容极其哀痛,使天地都为之感动。 哀感顽艳 原意是指内容凄切,文辞华丽,使愚笨和聪慧的人同样受感动。后多用来指艳情的小说、戏曲、电影

  • pycharm2021年激活码刚出【在线破解激活】

    pycharm2021年激活码刚出【在线破解激活】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • mybatisPlus填坑之逻辑删除

    mybatisPlus填坑之逻辑删除网上大部分的关于mybatisPlus的逻辑删除的配置介绍都是有问题的,原因可能是官网已经做了更新!!!错误如图:正确的配置是:SpringBoot配置方式: application.yml加入配置(如果你的默认值和mp默认的一样,该配置可无): yml文件(区别是多了一个路径db-config,同学们细看了) mybatis-plus:global-c…

  • pycharm 2021激活码(破解版激活)

    pycharm 2021激活码(破解版激活),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • pycharm如何关闭更新_win7怎么关闭系统更新

    pycharm如何关闭更新_win7怎么关闭系统更新关闭Pycharm2020.5.22自动更新1.为什么要关闭Pycharm自动更新?有的小白喜欢追新,一旦有更新就会想办法升级,但是很多人使用的专业版是D版,升级后就变为评估板了。所以告诉大家怎么关闭更新。2.操作方法(1)进入pycharm,选择”File”(2)选择“Settings”(3)选择“Appearance&Behavior”(4)选择“SystemSettings”(5)选择“Updates”(6)关闭自动更新“Au

  • 第五章 ,springboot 日志框架

    第五章 ,springboot 日志框架第五章 ,springboot 日志框架

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号