Java面向对象之多态
一、前言
前面我们了解和学习了继承的使用,现在我们来学习三大面向对象之一的多态。
多态使
java
面向对象丰富起来,所以学好多态十分重要。
二、什么是多态?
这个问题其实是显然的,从字面上看,也是多种状态,其实没错,多态就是在
不同情况表现出来的不同状况,叫多态。
比方说我们可以说,🍉是水果,也可以说,🍉是🍉 ((华强买🍉🤭)
是动物,也可以说,🐂是🐂(有人可能会问这是什么🐂🐎)
💸这里西瓜和牛有两种不同状态,这个就是多态。
三、多态的实现条件
- 🌤①有(继承/实现)关系
- 🌤②有方法重写
- 🌤③有(父类/接口)引用指向(子类/实现)对象
解读:
- 💸①有(继承/实现)关系(说明这里有子类父类或者接口的实现)
- 💸② 有方法的重写(重写抽象方法,或者重写父类中的方法)
- 💸 ③有(父类/接口)引用指向(子类/实现)对象(说明有父类/接口 对象名= new 子类/实现 )
四、多态的访问特点
- 🐟成员方法:编译看左边,执行看右边
- 🐟成员变量:编译看左边,执行看左边
解读:①所谓编译看左边,就是在语法问题上,看new的左边(父类或者接口)
有没有此方法或者变量, 如果有则编译通过,反之则不通过
② 执行就是最终结果看,比如,在方法中执行时看右边就是看new的右边,
就是说 对象调用的时候,子类和父类都有此方法时,以子类中的方法为结果。
接口我们这篇未涉及到,所以这次我们用继承的方式类实现多态。
1.我们建一个service包放Animal类
package service; public class Animal { public String name="动物"; public void eat(){ System.out.println("动物吃东西"); } public void sleep(){ System.out.println("动物要💤"); } }
2.再servic包下建一个impl包,包下放Cat类
因为我们要继承
Animal
类,而Animal
在与之不再 同一个包所以需要导包(导包就是告诉程序我要用的这个在哪里)
package service.impl; import service.Animal;//导包 public class Cat extends Animal { public String name="猫"; @Override public void eat() {//重写父类的方法 System.out.println("🐱吃🐟"); } public void play(){ System.out.println("🐱玩毛球"); } }
3.我们在建一个controller包,在里面建一个动物测试类
import service.Animal;//导包 import service.impl.Cat; public class AnimalController { public static void main(String[] args) { //多态创建对象 Animal a=new Cat();//父类引用指子类对象 a.eat(); a.sleep(); System.out.println("名字:"+a.name); } }
4.弄完之后我们程序一运行
如图:
看结果,可以知道,方法的编译看做左边,执行看右边,成员的编译看做左边,
执行看左边也就是,在方法中,以子类方法为主,在变量上,以父类的变量为主。
当父类有该方法,而子类没有该方法时,此时,结果时父类的方法。
4.1为什么两个有区别呢?
其实主要的原因时方法有重写,而成员变量则没重写(变量不能重写)
五、多态的优点和缺点?
- 🗡多态的优点:是提高了扩展性,子类可以在父类的基础上进行扩展。
- 🗡 多态的缺点:就是不能访问子类的中的成员变量和成员方法。
解决方法:后期涉及
其实只要通过继承,实现时,子类所含有的方法是最多的,此时我们通过子类
创建对象,就可以访问所有成员(非子类的私有成员除外)
如图:
import service.Animal; import service.impl.Cat; public class AnimalController { public static void main(String[] args) { Cat c=new Cat();//通过子类创建对象 c.eat(); c.sleep(); c.play(); System.out.println("名字:"+c.name); } }
六、为什么要分开建包
🗡有人不解,在同一个包下建就不用导包了,就没那么麻烦了,确实这话一点问题
都没有,但是我们要养成这种开建包的好习惯,以便于在代码很多的时候,便于
排查错误。因为写代码向来都是写时一时爽,找bug时满脸苦。为了防止这种情况
我们要养成分开建包的好习惯。
到此这篇关于Java面向对象之多态的文章就介绍到这了,更多相关Java面向对象 多态内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
原文出处:https://blog.csdn.net/weixin_60719453/article/details/120904
相关文章
- 这篇文章主要介绍了如何利用java语言实现经典《复杂迷宫》游戏,文中采用了swing技术进行了界面化处理,感兴趣的小伙伴可以动手试一试...2022-02-01
- 这篇文章主要介绍了java8如何用Stream查List对象某属性是否有重复的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-11
java 运行报错has been compiled by a more recent version of the Java Runtime
java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)...2021-04-01- 这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
- 这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
- 这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
- 说起C#和Java这两门语言(语法,数据类型 等),个人以为,大概有90%以上的相似,甚至可以认为几乎一样。但是在工作中,我也发现了一些细微的差别...2020-06-25
- 这篇文章主要介绍了JavaScript预解析,对象的的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助...2021-11-10
- 这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
如何在Spring WebFlux的任何地方获取Request对象
这篇文章主要介绍了如何在Spring WebFlux的任何地方获取Request对象,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下...2021-01-26- 这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
java 画pdf用itext调整表格宽度、自定义各个列宽的方法
这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31牛叉的Jquery――Jquery与DOM对象的互相转换及DOM的三种操作
只有jQuery对象才能调用jQuery类库的各种函数,同样有些dom对象的属性和方法在jQuery上也是无法调用的,不过基本上jQuery类库提供的函数包含了所有的dom操作。这就需要我们知道如何将jQuery对象和DOM的相互转换的方法。1...2015-10-30- 这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较)
这篇文章主要介绍了Java使用ScriptEngine动态执行代码,并且分享Java几种动态执行代码比较,需要的朋友可以参考下...2021-04-15- 这篇文章主要介绍了Java开发实现人机猜拳游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-03
- 这篇文章主要介绍了Java List集合返回值去掉中括号('[ ]')的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-29