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

相关推荐

  • 验证码Kaptcha的使用「建议收藏」

    验证码Kaptcha的使用「建议收藏」Kaptcha是一个非常实用的验证码生成工具,可以通过配置生成多样化的验证码。以图片的形式显示,从而无法进行复制粘贴。

  • SpringBoot详细研究-03系统集成

    SpringBoot详细研究-03系统集成

  • 代理ip免费网址_代理ip地址

    代理ip免费网址_代理ip地址西刺代理http://www.xicidaili.com快代理https://www.kuaidaili.com云代理http://www.ip3366.net无忧代理http://www.data5u.com/360代理http://www.swei360.com66ip代理http://www.66ip.cnip海代理http://www.iphai.com大…

    2022年10月29日
  • R语言做小提琴图_小提琴用英语怎么读?

    R语言做小提琴图_小提琴用英语怎么读?原创黄小仙即便小仙同学决定学习R语言来提升自己作图的“逼格”的时候,心中还有有些疑虑的(嘿嘿,我这么懒,可不愿意做无用功了

  • 硬盘没有初始化怎么恢复数据_初始化磁盘崩溃转储怎么处理

    硬盘没有初始化怎么恢复数据_初始化磁盘崩溃转储怎么处理没有初始化是因为分区表损坏了,导致硬盘出现没有初始化。磁盘显示没有初始化恢复数据办法工具/软件:光明数据恢复软件步骤1:软件运行后,直接双击需要恢复文件的磁盘。步骤2:坐等软件扫描完毕大概需要几分钟到半个小时,稍微耐心等下即可。步骤3:勾上所有需要恢复的数据,然后点右上角的保存,《另存为》按钮,将勾上的文件COPY出来。步骤4:等待软件将资料复制完成就可以了。注意事项1:没有初始化恢复出来的资料需要暂时保存到其它盘里。注意事项2:想要恢复没有初始化需要注意,在文件找到之前,不要

  • IDEA主题插件:Material Theme UI「建议收藏」

    IDEA主题插件:Material Theme UI「建议收藏」大致效果如下:IDEA官方下载MaterialThemeUI步骤:Settings->Plugins->搜索Translation(某些版本IDEA搜索插件有问题可到官网下载再安装本地插件)->安装->重启IDEA->首次根据提示进行UI相关配置->使用配置后的UI如需离线安装插件参考如下:如需修改配置项参考如下:注…

发表回复

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

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