【JavaSE】继承与多态(下篇)

简介: 【JavaSE】继承与多态(下篇)

hello,进来的小伙伴们,你们好呐!✨

🎁🎁系列专栏【JavaSE】

🍰🍰本篇内容:JavaSE部分多态的知识详解,对准知识点阅读喔!

☕☕作者简介:一名大二即将升大三的科班小白,我很平凡,学会努力!

🍱🍱码云存放仓库gitee:https://gitee.com/king-zhou-of-java/java-se.githttps://gitee.com/king-zhou-of-java/java-se.git

一、多态的概念

🍣🍣多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同 的状态。

🍇🍇例1:比如打印机的功能是打印文件,那么打印机又分为彩色打印机黑白打印机

image.jpegimage.jpeg

二、多态实现条件

   🍶1. 必须在继承体系下。

   🍦2. 子类必须要对父类中方法进行重写。

   🍺3. 通过父类的引用调用重写的方法。

🍲🍲实例:首先我们定义一个父类,这个Animal有两个成员变量,一个方法eat()。

   class Animal{

       public String name;

       public int age;

       public Animal(String name,int age){

           this.age = age;

           this.name = name;

       }

       public void eat(){

           System.out.println(name+"正在吃东西");

       }

   }

🍠接下来我们定义两个子类Dog和Cat分别继承Animal,在这两个方法中重写eat()方法。

   class Dog extends Animal{

       public Dog(String name,int age){

           super(name,age);

       }

       public void eat(){

           System.out.println(name+"吃骨头");

       }

       public void bark(){

           System.out.println(name+"汪汪汪~");

       }

   }

   

   class Cat extends Animal{

       public Cat(String name,int age) {

           super(name,age);

       }

   

       public void eat(){

           System.out.println(name+"吃鱼");

       }

       public void mew(){

           System.out.println(name+"喵喵喵~");

       }

   }

🍏再次,我们在Test函数里面定义一个静态方法func(),参数是我们的父类Animal的引用,然后我们调用这个方法eat()。

   public class Test1 {

       public static void func(Animal animal){

           animal.eat();

       }

🍐最后我们实例化对象,初始化赋值。

    public static void main(String[] args) {

           Cat cat = new Cat("加菲猫",5);

           Dog dog = new Dog("旺财",6);

   

       }

   🍱🍱那么,这个时候我们就会发现一个问题,当类的调用者在编写 eat 这个方法的时候, 参数类型为 Animal (父类), 此时在该方法内部并不知道, 也不关注当前的animal 引用指向的是哪个类型(哪个子类)的实例. 此时 animal这个引用调用 eat方法可能会有多种不同的表现(和animal 引用的实例相关), 这种行为就称为 多态。🍵🍵

三、 重写

一、概念

🍧🍧重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写。

二、方法重写的规则

🍏1.子类在重写父类的方法时,一般必须与父类方法原型一致: 返回值类型 方法名 (参数列表) 要完全一致。

image.png

🍧2.被重写的方法返回值类型可以不同,但是必须是具有父子关系的,比如我们将eat()方法定义成父子关系。

image.png

🍰3.访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方法就不能声明为 protected。

image.png

🍡 4.父类被static、private修饰的方法、构造方法都不能被重写。

image.png

🍊5.重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法构成重写。

🍑使用方法:1.鼠标右键,找到generate.

c7e2588fd7ea47cebc2a0bae9316df6f.png

🍤2.选中红色箭头指向的部分。

c72076fd6d674fcaac314dc3b72fd935.png

🍾3.进来后点击我们要重写的方法。

2428819f26f141fa8baeeb79f2e600d3.png

🥞4.最后的结果就是这样。

acb7b49add1f4837b9d0d6d54bac03b0.png

🥯5.假如我们故意把重写的格式写错,这个注解可以很好的帮我们检测出来。

cdfe305255404940a5ebd8acd0588c3c.png

相关文章
|
Kubernetes Linux Docker
极简的配置单节点Kubernetes(k8s)集群
在传统的概念当中,Docker是简单易用的,Kubernetes是复杂强大的。 深入了解之后会发现Docker的简单是因为用户可以从基本功能开始用起, 只需要一台Linux主机,运行一下apt-get install docker-engine 或者yum install docker-engine,立马就可以用docker run启动一个新的容器, 整个过程与用户之前积累的Linux软件使用体验高度一致。
6455 0
|
10月前
|
C++
【C++数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】
【数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】(1)遇到左括号:进栈Push()(2)遇到右括号:若栈顶元素为左括号,则出栈Pop();否则返回false。(3)当遍历表达式结束,且栈为空时,则返回true,否则返回false。本关任务:编写一个程序利用栈判断左、右圆括号是否配对。为了完成本关任务,你需要掌握:栈对括号的处理。(1)遇到左括号:进栈Push()开始你的任务吧,祝你成功!测试输入:(()))
236 7
|
12月前
|
敏捷开发 监控 数据可视化
2024年敏捷项目管理工具使用排行榜:哪些工具适合大型团队?
随着敏捷方法的普及,2024年的敏捷项目管理工具市场更加多样化,从团队协作到任务追踪,功能日益丰富。本文将评测六款热门工具:板栗看板、Wrike、Smartsheet、TeamGantt、Targetprocess和Airtable,分析其功能亮点、适用行业及优缺点,助力企业选择最适合的工具。
2024年敏捷项目管理工具使用排行榜:哪些工具适合大型团队?
|
缓存 NoSQL 应用服务中间件
Redis实战篇
Redis实战篇
|
NoSQL Ubuntu MongoDB
在Ubuntu 16.04上安装和保护MongoDB的方法
在Ubuntu 16.04上安装和保护MongoDB的方法
209 1
|
测试技术 Nacos Docker
xxl任务绑定一台服务器的两个项目
项目需在测试和生产环境自动注册到xxl服务。之前测试环境未注册,且手动注册。解决方案:修改xxl.nacos配置,设置xxl.job.executor.ip为特定IP,避免自动注册错误的IP。因同一机器上运行两个项目,需分配不同端口,如测试环境设为9997,并在docker运行命令中映射该端口。最后在阿里云开放9997端口并重启服务,实现自动注册。
221 1
|
Python
Python中如何定义函数 以及实参和形参的区别
Python中如何定义函数 以及实参和形参的区别
428 1
|
小程序 JavaScript 前端开发
【每周一个小技巧】支付宝小程序跳转生活号的几种方式
【每周一个小技巧】支付宝小程序跳转生活号的几种方式
655 8
|
JavaScript Shell 开发工具
如何优雅的复制当前项目分支名
前言 在工作中,协作场景下,避免不了要告诉同事你当前的开发分支,通常情况下需要2步 Step1 查看当前分支
|
存储
kettle开发篇-列转行
kettle开发篇-列转行
763 0