【精选】java继承进阶——继承的特点 this、super

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

目录

成员变量的访问特点

代码:

练习:

成员方法的访问特点

代码:

方法的重写 @Override

方法重写的本质

练习

画图

代码


成员变量的访问特点

  • 就近原则:谁离我近,我就用谁
  • 先在局部位置找,本类(this)成员位置找,父类成员(super)位置找,逐级往上
代码:
package demon3;public class Test {public static void main(String[] args) {Zi z = new Zi();z.ziShow();}
}class Ye {String name = "Ye";
}class Fu extends Ye{String name = "Fu";
}class Zi extends Fu{String name = "Zi";public void ziShow(){String name = "ziShow";System.out.println(name);//ziShowSystem.out.println(this.name);//ZiSystem.out.println(super.name);//Fu}
}
  1. System.out.println(name);将输出ziShow。这是因为在ziShow()方法的作用域中,存在一个局部变量name,它的值被赋为"ziShow",所以在当前作用域内,最近的定义的name变量即是这个局部变量。
  2. System.out.println(this.name);将输出Zi。这是因为this关键字表示当前对象(Zi类的实例对象),所以this.name表示当前对象的name属性的值,而Zi类中定义的name属性为"Zi"
  3. System.out.println(super.name);将输出Fu。这是因为super关键字表示父类对象(Zi类的父类Fu的实例对象),所以super.name表示父类对象的name属性的值,而Fu类中定义的name属性为"Fu"
练习:
  • //如何打印Zi
  • //如何打印Fu
  • //如何打印喝茶
  • //如何打印吃鸡
package demon3;
public class Test {public static void main(String[] args) {Zi z = new Zi();z.show();}
}class Fu {String name = "Fu";String hobby = "喝茶";}class Zi extends Fu {String name = "Zi";String game = "吃鸡";public void show() {//如何打印ZiSystem.out.println(name);System.out.println(this.name);//如何打印FuSystem.out.println(super.name);//如何打印喝茶System.out.println(hobby);System.out.println(this.hobby);System.out.println(super.hobby);//如何打印吃鸡System.out.println(game);System.out.println(this.game);}
}

成员方法的访问特点

  • 直接调用满足就近原则:谁离我近,我就用谁
  • super调用,直接访问父类
代码:
package demon3;
public class Test {public static void main(String[] args) {OverseasStudent s = new OverseasStudent();s.lunch();}
}class Person {public  void eat() {System.out.println("吃米饭,吃菜");}public void drink() {System.out.println("喝开水");}
}//留学生
class OverseasStudent extends Person{public void lunch(){this.eat();//吃意大利面this.drink();//喝凉水super.eat();//吃米饭,吃菜super.drink();//喝开水}//应用场景:当父类中方法,不能满足子类现在的需求时,我们就需要把这个方法进行重写。//注意:子类中重写的方法上面需要加上@override@Overridepublic  void eat() {System.out.println("吃意大利面");}@Overridepublic void drink() {System.out.println("喝凉水");}}class Student extends Person{public void lunch(){//先在本类中查看eat和drink方法,就会调用子类的,如果没有,就会调用从父类中继承下来的eat和drink方法this.eat();this.drink();//直接调用父类中的eat和drink方法super.eat();super.drink();}}

方法的重写 @Override

当父类的方法不能满足子类现在的需求时,需要进行方法重写。

书写格式 :

在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法。

@Override重写注解

1.@Override是放在重写后的方法上,校验子类重写时语法是否正确。

2.加上注解后如果有红色波浪线,表示语法错误。

建议:重写的方法尽量和父类保持一致

方法重写的本质

练习

现在有三种动物:哈士奇、沙皮狗、中华田园犬

暂时不考虑属性,只要考虑行为。

请按照继承的思想特点进行继承体系的设计。

**三种动物分别有以下的行为: **

  • 哈士奇: 吃饭(吃狗粮)、喝水、看家、拆家

  • 沙皮狗: 吃饭(吃狗粮、吃骨头)、喝水、看家

  • 中华田园犬:吃饭(吃剩饭)、喝水、看家

画图

代码

总共要写5个代码

Dog(父类)

package demon3;public class Dog {public void eat(){System.out.println("狗在吃狗粮");}public void dirink(){System.out.println("狗在喝水");}public void lookhome(){System.out.println("狗在看家");}
}

Hsky

package demon3;public class Hsky extends Dog{//哈士奇多一个拆家public void breakhome(){System.out.println("哈士奇在拆家");}
}

shapi

package demon3;public class shapi extends Dog{//因为沙皮狗吃的是狗粮和骨头//父类中的方法不能满足我们的需求了,所以需要进行重写@Overridepublic void eat() {super.eat();//狗在吃狗粮System.out.println("狗在啃骨头");}
}

chinaDog

package demon3;public class chinaDog extends Dog{@Overridepublic void eat() {System.out.println("吃剩饭");}
}

测试类DogTest

package demon3;import demon.Hahky;public class DogTest {public static void main(String[] args) {//创建对象并调用Hahky h = new Hahky();h.eat();h.breakhome();h.drink();h.lookhome();System.out.println("-----------------------------------------");chinaDog c = new chinaDog();c.eat();c.lookhome();c.dirink();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/462952.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java面试】数据类型常见面试题

什么是包装类型 将基本类型包装进了对象中得到的类型 基本类型和包装类型有什么区别 用途不同:基本类型一般用于局部变量,包装类型用于其他地方存储方式不同:用于局部变量的基本类型存在虚拟机栈中的局部变量表中,用于成员变量…

OCP使用web console创建和构建应用

文章目录 环境登录创建project赋予查看权限部署第一个image检查pod扩展应用 部署一个Python应用连接数据库创建secret加载数据并显示国家公园地图 清理参考 环境 RHEL 9.3Red Hat OpenShift Local 2.32 登录 在 crc start 启动crc时,可以看到: .....…

2.7日学习打卡----初学RabbitMQ(二)

2.7日学习打卡 JMS 由于MQ产品很多,操作方式各有不同,于是JAVA提供了一套规则 ——JMS,用于操作消息中间件。JMS即Java消息服务 (JavaMessage Service)应用程序接口,是一个Java平台中关于面 向消息中间件的…

2 月 9 日算法练习- 数据结构 - 除夕快乐♪٩(´ω`)و♪

翻转括号序列 暴力过20%数据 思路&#xff1a;括号合法序列问题可以利用前缀和&#xff0c;将"(“看成 1&#xff0c;”)"看成 0&#xff0c;规律是到某个位置为止的前缀和>0并且到最后前缀和0。 #include<bits/stdc.h> using namespace std; const int N…

js库和js框架你还分不清吗?一句话就讲明白了。

一、JS库 JS库&#xff08;JavaScript Library&#xff09;是一组封装了常用功能和工具的JavaScript代码集合。它们提供了一系列的函数和方法&#xff0c;使得开发者能够更便捷地进行常见的操作和处理。JS库通常是轻量级的&#xff0c;只关注某个特定的功能或问题领域。 一些常…

【开源】JAVA+Vue+SpringBoot实现实验室耗材管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…

Trie 字典树的两种实现方式

Trie&#xff0c;又称字典树、单词查找树或键树&#xff0c;是一种树形结构&#xff0c;是一种哈希树的变种。典型应用是用于统计&#xff0c;排序和保存大量的字符串&#xff08;但不仅限于字符串&#xff09;&#xff0c;所以经常被搜索引擎系统用于文本词频统计。它的优点是…

更新win11后无法上网

问题描述 系统提示可以更新win11了&#xff0c;然后我就想着更新一下试试。等了好久终于下载完了准备更新&#xff0c;结果提示更新失败&#xff0c;再次更新时下载到一半就停了&#xff0c;然后就发现连不上网了&#xff08;真服了&#xff0c;win11没更新成功&#xff0c;还…

学习Android的第五天

目录 Android ConstraintLayout 约束布局 简介 ConstraintLayout 约束布局分类 1、相对定位 (Relative positioning) 2、边距 ( Margins ) 3、居中定位和偏向 ( Centering positioning and bias ) 4、环形定位 ( Circular positioning ) 5、对可见性的处理 ( Visibilit…

介绍 MSTest Runner – CLI、Visual Studio 等

作者&#xff1a;Amaury Lev Marco Rossignoli Jakub Jareš 排版&#xff1a;Alan Wang 我们很高兴推出 MSTest 运行器&#xff0c;这是一款全新的轻量级 MSTest 测试运行器。这个新的运行器使测试更加便携和可靠&#xff0c;运行速度更快&#xff0c;并且具有可扩展性&#x…

Unity类银河恶魔城学习记录2-1.2.3.4.5 背景和摄像机相关设置 P42-p45

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ParallaxBackground.cs using System.Collections; using System.Collect…

【从Python基础到深度学习】4. Linux 常用命令

1.配置root用户密码 root用户为系统默认最高权限用户&#xff0c;其他用户密码修改命令与root用户修改密码命令相同 sudo passwd root 2.添加用户&#xff08;henry&#xff09; sudo useradd -m henry -s /bin/bash 3.配置henry用户密码 Xshell下连接新用户&#xff08;hen…