【精选】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.mzph.cn/news/670806.shtml

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

相关文章

5 款提升 UI 设计效率的软件工具

你知道如何选择正确的UI设计软件吗?你知道设计漂亮的用户界面和带来良好用户体验的应用程序需要什么界面设计软件吗?基于APP界面的不同功能,所选择的APP界面设计软件也会有所不同。然而,并不是说所有的APP界面设计软件都非常精通&…

【安卓中kotlin 泛型的基本用法】

泛型的基本用法 泛型主要有两种定义方式,一种是定义泛型类,另一种是定义泛型方法,使用的语法结构都是。当然括号内的T并不是固定要求的,事实上你使用任何英文字母或单词都可以,但是通常情况下,T是一种约定…

VMware16安装CentOS7mini 中遇到的一些问题

1、安装后网络不通解决方法: 修改这个文件/etc/sysconfig/network-script/ifcfg-ens33下ONBOOTno这个选项为yes;重启网络service network restartping baidu.com 2、安装的CentOS mini 系统少了很多软件需要安装,联网后一般采用网络安装 y…

Leetcode02.05:链表求和

一、题目描述 给定两个用链表表示的整数,每个节点包含一个数位。 这些数位是反向存放的,也就是个位排在链表首部。 编写函数对这两个整数求和,并用链表形式返回结果。 示例: 输入:(7 -> 1 -> 6) (5 -> 9 -…

【C语言】贪吃蛇 详解

该项目需要的技术要点 C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32API等。 由于篇幅限制 和 使知识模块化, 若想了解 使用到的 Win32API 的知识:请点击跳转:【Win32API】贪吃蛇会使用到的 Win32API 目录 1. 贪吃蛇游…

02.02_111期_C++_数据内存分布笔记

operator new 和 operator delete是系统提供的全局函数 operator new是对malloc的封装 operator deleter是对free的封装 实际上在写出int* p2 new int;这样的代码的时候, 由于new是一个操作符,所以在编译的时候要转成对应的指令 转成的指令就是opera…

yolo导出的onnx怎么使用onnxruntime调用

1.上几篇文件,写了怎样标注数据,获取yolo数据,怎样训练数据。这篇文章写下,怎样使用yolo训练好的网络进行推理,怎样使用onnxruntime调用网络推理。 2.yolo模型训练后推理,主要分两种,一种是使用…

系统设计认知与常用方法(架构设计)

系统设计应该着重解决什么问题、回应哪些关切、如何演进、常用设计方法、如何落地? 系统设计认知 设计是需求与开发的连接点 解决复杂度 本质复杂度:问题本身的固有复杂度(不可避免)衍生复杂度:解决方法引入的额外…

HTTP相关问题

目录 1.从输入URL到页面展示到底发生了什么? 2.HTTP状态码有哪些? 2.1 2XX(成功状态码) 2.2 3XX(重定向状态码) 2.3 4XX(客户端错误状态码) 2.4 5XX(服务端错误状态码) 3.HTTP 请求头中常见的字段有哪些? 4.HTTP和HTTPS有什么区别&…

vue3-内置组件-Transition

基于状态变化的过渡和动画(常用) 建议多看几遍~~。然后动手去写写,学编程只有多动手才能有感觉。 内置组件: 它在任意别的组件中都可以被使用,无需注册。 Vue 提供了两个内置组件,可以帮助你制作基于状态变化的过渡和动…

EMC测试介绍

EMC测试介绍 EMC包括电磁干扰(EMI) 和抗电磁干扰(EMS)两个部分。发射干扰传导发射测试极限线以峰值检坡器测量时使用的决策树应用EN55022标准的波形示例测试仪器![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/4580f693ae9a4f84891ece29681c7bf2.png) 辐射发射测试…

如何快速捕获和验证用户软件需求,实现快速迭代

在软件开发过程中,快速捕获和验证用户需求,以及迅速迭代功能,是保持项目敏捷性和用户满意度的关键。下面将介绍一些建议,帮助你在软件开发过程中更有效地满足用户需求。 1. 深入沟通与用户互动 要捕获用户需求,必须与…

Lua可变参数函数

基础规则 lua传入参数给一个function时采用的是“多余部分被忽略,缺少部分有nil补足”的形式: function f(a, b)return a or b endCALL PARAMETERS f(3) a3, bnil f(3, 4) a3, b4 f(3, 4, 5) a3, b4 (5 is discarded) unpack/pack…

CPU对数据库的性能影响

最近做了个CPU性能测试,测试语句如下 select count(*) from test01; ---44537344行数据,大概5.6GB 设置了参数alter system set "_serial_direct_read"never; 避免direct path read 为了避免物理IO的影响,多次反复运行,…

react 之 react.memo

React.memo 作用:允许组件在props没有改变的情况下跳过重新渲染 组件默认的渲染机制 默认机制:顶层组件发生重新渲染,这个组件树的子级组件都会被重新渲染 // memo // 作用:允许组件在props没有改变的情况下跳过重新渲染import…

敏捷开发交付绩效度量

在快速敏捷开发模式下,主要是要求技术能够快速响应,但并不是对质量没有要求,那么在又快又要质量好的前提下,如何去度量? 主要参考文章,软件交付效能度量 - Thoughtworks洞见 说明:如何在敏捷开…

npm淘宝镜像源换新地址

新的淘宝npm镜像源地址:https://registry.npmmirror.com 切换新的镜像源 npm config set registry https://registry.npmmirror.com然后再执行以下操作查看是否成功 npm config list如果没安装过淘宝镜像源的,则直接安装 npm install -g cnpm --regi…

JVM 性能调优 - 参数调优(3)

查看 JVM 内存的占用情况 编写代码 package com.test;public class PrintMemoryDemo {public static void main(String[] args) {// 堆内存总量long totalMemory Runtime.getRuntime().totalMemory();// jvm 试图使用的最大堆内存long maxMemory Runtime.getRuntime().maxM…

【Linux】Linux权限(下)

Hello everybody!在上一篇文章中,权限讲了大部分内容。今天继续介绍权限剩下的内容,希望大家看过这篇文章后都能有所收获! 1.更改文件的拥有者和所属组 对于普通用户,文件的拥有者和所属组都无权修改。 、 、 但root可以修改文件…

多账号运营为什么要使用动态住宅代理IP?

对于跨境有多账号运营需求的企业来说,选择正确类型的代理IP对于平稳运行至关重要。但最适合这项工作的代理类型是什么?为了更好地管理不同平台上的多个账户并优化成本,您可以选择动态住宅代理。 一、什么是动态住宅代理 动态住宅代理IP是互联…