JAVA零基础小白自学日志——第十七天

文章目录

  • 1.方法的覆写
  • 2.类的层次结构
  • 3.如何判定正确的继承顺序
  • 4.如何判断子类继承(继承这个词我始终觉得很变扭)了父类的什么
  • 5.继承关系的实质
  • 6.关键字:super 和 this
    • [1].this关键字
      • (1)this关键字调用本类属性
      • (2)this关键字本类方法调用
      • (3)this关键字使用的注意事项
    • [2].super关键字
      • (1)super关键字调用父类属性
      • (2)super关键字调用父类方法
    • [3].super关键字和this关键字的区别

今日提要:再谈继承

1.方法的覆写

儿子遗传了爹的鼻窦炎,还有哮喘(扩展基类或者说超类的方法和实例变量),可是儿子的鼻窦炎更高级了,儿子的诊断里面就增加自己特别的鼻窦炎(覆盖基类或超类的方法),这就是子类对父类(基类或超类)的覆写,这里注意实例变量是不会被覆写,因为实例变量不定义任何特殊的行为,它们只表达状态;
这里需要注意的是,方法的覆写,只针对这个子类,子类在实例化形成对象时,可以用自己的同名方法覆写父类(基类或超类)的方法,以达到子类个性化表达的作用。

覆写方法
覆写方法
动物
String 名字
int 大小
String 食物
int 饥饿度
void 叫声()
void 行动()
void 饮食()
void 睡眠()
void 行动()
void 饮食()
void 行动()
void 饮食()

用中文是为了比较好读,代码里别用…

鸟的行动是飞行(你要非跟我抬杠,鸵鸟不能飞,你也可以在写鸵鸟这个类的时候,直接覆写鸟类的行动…)
猫是在地面奔跑的,别说爬树,说我也不理你;
鸟是吃素的,猫是吃荤的,这都是它们自己的特点,所以为它们建立自己的相关方法,覆写基类里面的相同方法,以达到依据特点实例化的目的;
方法的调用,也是遵循从具体到通用的优先级管理,也就是说,当你X.eat();//调用一个吃的方法的时候,JVM会从最底层的类开始依次向上寻找,首先出现的就直接调用,一句话概括,JVM会选择对特定对象最特定的那个版本调用

2.类的层次结构

用动物举例这个比较好说明,我看的资料里面都用动物,看来大家都这么认为的。好比,猫、狗、狼和老虎四个对象,我们发现猫和老虎都属于猫科,那么抽象出来的猫科就是猫和老虎的父类,而狗和狼都属于犬科,同理犬科就是狗和狼的父类,然后犬科和猫科都是动物中的一个种类,那么就可以抽象出来动物类,那么动物类就是猫科和犬科的父类,这就是类的层次结构,这个应该很好懂,但是实际上抽象的过程想当考验逻辑能力和想象力,还是有个心理准备的好;

3.如何判定正确的继承顺序

我们怎么来确定我们建立的父类,是不是某个特定子类的父类呢?方法很简单,就是问一下是不是;
比如:男老师是不是老师呢?猫是不是动物?外科医生是不是医生?等等等等,只要这个问题的答案是肯定的,那么后面的类就是前面特定类的父类,还有一点很重要必须要注意,是不是这个问题是单向的,不能反过来问,如果反过来问也出现了肯定的答案,那么这个类的继承肯定是有问题的;

4.如何判断子类继承(继承这个词我始终觉得很变扭)了父类的什么

我们说过Java有四种访问权限,从严格到宽松,依次是private<default<proteced<public;
现在我们只讨论,两种情况:如果方法被private(私有)修饰,那么成员不可继承,如果方法被public(公共)修饰,成员可以继承

5.继承关系的实质

其实继承关系的实质就是为一组类建立了统一的一个协议,并遵循协议运行,比如Java本身;

6.关键字:super 和 this

[1].this关键字

(1)this关键字调用本类属性

  • this代表当前对象(调用类中方法或属性的那个对象)的引用;
  • this只能在方法内部使用;
  • this.属性名:表示对象自己的属性;
    来看两段代码:
    代码一
public class ThisTest {private int num;private String col;ThisTest(int num,String col){num = num;col = col;}public static void main(String[] args) {ThisTest t1 = new ThisTest(20,"oo");ThisTest t2 = new ThisTest(30,"oopp");System.out.println(t1.num +" , " + t2.num);System.out.println(t1.col +" , " + t2.col);}}

输出结果:

00
nullnull

代码二

public class ThisTest {private int num;private String col;ThisTest(int num,String col){this.num = num;this.col = col;}public static void main(String[] args) {ThisTest t1 = new ThisTest(20,"oo");ThisTest t2 = new ThisTest(30,"oopp");System.out.println(t1.num +" , " + t2.num);System.out.println(t1.col +" , " + t2.col);}}

输出结果:

2030
oo,oopp

当构造函数参数与实例变量同名时,实例变量就被屏蔽了,它们是无法通过构造函数直接赋值的,当添加了this关键字之后,就可以被对象赋值了,而this关键字指代的是 t1 和 t2,这两个对象的引用
来看第三段代码

public class ThisTest {private int num;private String col;ThisTest(int tempnum,String tempcol){num = tempnum;col = tempcol;}public static void main(String[] args) {ThisTest t1 = new ThisTest(20,"oo");ThisTest t2 = new ThisTest(30,"oopp");System.out.println(t1.num +" , " + t2.num);System.out.println(t1.col +" , " + t2.col);}}

输出结果:

2030
oo,oopp

自己看不同吧,太明显了

(2)this关键字本类方法调用

  • this关键字调用构造函数必须在构造函数的第一行
public class ThisTest {private int num;private String col;ThisTest(int num){		this.num = num;		}ThisTest(String col){this(20);this.col = col;}public static void main(String[] args) {ThisTest t1 = new ThisTest("oo");ThisTest t2 = new ThisTest("oopp");System.out.println(t1.num +" , " + t2.num);System.out.println(t1.col +" , " + t2.col);}}

输出结果:

20 , 20
oo , oopp

重载的构造函数里面的第一行this(20)调用的就是ThisTest(int num){......}必须在第一行

  • this关键字调用本类方法
public class ThisTest {void move() {System.out.println("好好学习");}void result() {this.move();System.out.println("天天向上");}public static void main(String[] args) {ThisTest s1 = new ThisTest();s1.result();}}

输出结果:

好好学习
天天向上

this.move();调用的就是方法void move() {...},调用方法的时候,无所谓第几行,就看你的需要了;

(3)this关键字使用的注意事项

  • this关键字只可以用于普通的实例方法;
  • this关键字不可以在静态方法或静态块中使用(main()函数就是静态方法);

[2].super关键字

(1)super关键字调用父类属性

说别的啥都没啥用,看代码吧

public class SuperTest {public static void main(String[] args) {SonClass s1 = new SonClass();s1.show();}}
class SuperClass{int num = 100;
}
class SonClass extends SuperClass{int num = 10;void show () {System.out.print("爹的num= " + super.num + " , " + "儿子的num= " + num);}
}

输出结果:

爹的num= 100 , 儿子的num= 10

子类里面的super.num调用的就是父类class SuperClass{ int num = 100;}里面的变量num的值;

(2)super关键字调用父类方法

  • super关键字调用构造函数必须在第一行;
    第一段代码:
class SuperClass{int num;String col;SuperClass(){}
}
class SonClass extends SuperClass{SonClass(){super();}
}
  • 子类的构造函数必须依赖父类的构造函数而建立,如果父类的构造函数为无参空函数,super();是默认存在的,不需要写;

第二段代码:

class SuperClass{int num;String col;SuperClass(int num,String col){}
}
class SonClass extends SuperClass{SonClass(){super(20,"oo");}
}
  • 父类的构造函数含有参数的,super关键字必须依照父类构造函数的参数列表填写;
  • super关键字访问父类方法;
    第三段代码:
public class SuperTest {public static void main(String[] args) {SonClass s1 = new SonClass();s1.result();}}
class SuperClass{void move() {System.out.println("好好学习");}
}
class SonClass extends SuperClass{void result() {super.move();System.out.println("天天向上");}
}

输出结果:

好好学习
天天向上

这个一看就明白了,不用多说了;

[3].super关键字和this关键字的区别

这就是为什么要把这两个关键字都放在这里一起说的原因了

  • super()调用父类的构造函数,必须在构造函数的第一行,this()调用本类构造函数,必须在构造函数的第一行,看到这里大家应该明白一件事情了,super()和this()不能同时调用构造函数;
  • this代表调用者这个对象,super代表父类对象的引用;
  • this没有继承也能使用,super必须在继承条件下;
  • this()本类构造,super()父类构造;

今天的内容就写到这里了,里面太多中文要翻译成中文了,非常费劲

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

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

相关文章

企业数字化转型对低代码开发平台的推动促进影响

随着企业数字化转型的浪潮日益高涨&#xff0c;低代码开发平台&#xff08;Low-Code Platform, LCP&#xff09;逐渐崭露头角&#xff0c;成为推动这一进程的重要力量。低代码开发平台以其高效、灵活和易于使用的特点&#xff0c;为企业提供了快速构建和迭代应用的能力&#xf…

IDEA快速生成项目树形结构图

下图用的IDEA工具&#xff0c;但我觉得WebStorm 应该也可以 文章目录 进入项目根目录下&#xff0c;进入cmd输入如下指令&#xff1a; 只有文件夹 tree . > list.txt 包括文件夹和文件 tree /f . > list.txt 还可以为相关包路径加上注释

掌握Python异步编程:一步一步迈向高效网络应用开发

在如今这个信息爆炸的时代&#xff0c;网络应用的需求日益增长&#xff0c;对开发效率和性能的要求也越来越高。Python作为一门流行的编程语言&#xff0c;提供了强大的异步编程功能&#xff0c;帮助开发者构建高效、响应迅速的网络应用程序。本文将带领读者一步步掌握Python异…

AI发展中的伦理挑战与应对策略

AI发展中的伦理挑战与应对策略 人工智能&#xff08;AI&#xff09;的快速发展在为社会带来许多便利和创新的同时&#xff0c;也带来了诸多伦理挑战。这些挑战主要集中在数据隐私侵犯、信息茧房的制造、歧视性算法、深度伪造技术等方面。针对这些问题&#xff0c;需要从多个层…

ROS-机械臂——从零构建机器人模型

URDF建模 URDF URDF&#xff0c;全称为 Unified Robot Description Format&#xff08;统一机器人描述格式&#xff09;&#xff0c;是一种用于描述机器人几何结构和运动学属性的标准文件格式。URDF 文件通常用于机器人模拟、路径规划、控制算法开发和可视化等领域&#xff0c…

workingset protection/detection on the anonymous LRU list

Working-set protection for anonymous pages [LWN.net] [PATCH v3 0/9] workingset protection/detection on the anonymous LRU list [LWN.net] 14.7 跟踪LRU活动情况和Refault Distance算法-CSDN博客

React学习笔记03-----手动创建和运行

一、项目创建与运行【手动】 react-scripts集成了webpack、bable、提供测试服务器 1.目录结构 public是静态目录&#xff0c;提供可以供外部直接访问的文件&#xff0c;存放不需要webpack打包的文件&#xff0c;比如静态图片、CSS、JS src存放源码 &#xff08;1&#xff09…

十大经典排序算法(1)——冒泡排序

一、算法简述 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单直观的暴力枚举式排序算法。它重复地遍历要排序数组&#xff0c;每次比较两个相邻元素&#xff0c;如果顺序错误就把他们交换过来。直到数组已经按照顺序排列&#xff0c;冒泡算法之所以叫做“冒泡”&…

公司想无偿裁员,同事赖着不走

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 这招好像也不错! 事情是这样的&#xff1a;某公司准备把成本高的员工都裁掉&#xff0c;主要包含研发部和程序员&#xff0c;总共18个人&#xff0c;准备裁掉10人&#xff0c;因为他们工资开的太高了&#xff0c;…

HTML+CSS+JS井字棋(来自动下棋)

井字棋 自动下棋 玩家先下&#xff0c;计算机后下 源码在图片后面 点赞❤️收藏⭐️关注&#x1f60d; 效果图 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Tic Tac Toe Game</tit…

释放DOE的能量,快速确定最佳工艺设置,节省时间、成本和资源

您是否希望降低成本、提高生产效率&#xff0c;并最大限度地减少行业对环境的影响&#xff1f; 所有行业&#xff0c;尤其是钢铁、铝、水泥和石化等能源密集型行业&#xff0c;都面临着应对这些挑战的持续压力。供应链压力、可持续发展、严格的监管环境、日益增长的消费者预期…

前端使用 Vue 3,后端使用 Spring Boot 构建 Hello World 程序

前端使用 Vue 3&#xff0c;后端使用 Spring Boot 构建 Hello World 程序 前端&#xff08;Vue 3&#xff09; 首先&#xff0c;创建一个 Vue 3 项目。 1. 安装 Vue CLI npm install -g vue/cli2. 创建 Vue 项目 vue create frontend在交互式提示中&#xff0c;选择默认的…

web滚动页面到指定位置

方法&#xff1a;scrollTo(x-coord,y-coord) 方法是Web API中Element接口的一部分&#xff0c;但它主要用于Window对象或可滚动的元素&#xff08;如具有overflow属性为auto或scroll的<div>&#xff09;。此方法用于将窗口滚动到文档中的特定位置&#xff0c;或者将某个元…

【Linux】权限的管理和Linux上的一些工具

文章目录 权限管理chgrpchownumaskfile指令sudo指令 目录权限粘滞位Linux中的工具1.软件包管理器yum2.rzsz Linux开发工具vim 总结 权限管理 chgrp 功能&#xff1a;修改文件或目录的所属组 格式&#xff1a;chgrp [参数] 用户组名 文件名 常用选项&#xff1a;-R 递归修改文…

股指期货与股票抛空机制的区别是什么?

在投资的世界里&#xff0c;有两种看似相似&#xff0c;实则大有不同的玩法&#xff1a;股指期货和股票抛空。让我们用通俗易懂的话来搞清楚这两者的区别。 股票抛空&#xff1a;借来卖出&#xff0c;期待低价买回 想象一下&#xff0c;你看到市场上有只股票&#xff0c;觉得…

基于STM32设计的超声波测距仪(微信小程序)(186)

基于STM32设计的超声波测距仪(微信小程序)(186) 文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的选择1.5 系统框架图…

Oracle 常用系统

常用系统包 查看系统包 SELECT * FROM all_objects WHERE object_type PACKAGE AND owner SYS AND object_name 包名称;AUTO_SERVER_PKG AUTO_SERVER_PKG 在Oracle数据库的上下文中&#xff0c;并不是一个标准的Oracle系统包或内置功能。然而&#xff0c;在参考文章中提到…

大模型笔记3 Longformer for Extractive Summarization训练

目录 改为GPU运行 从文本label生成输入token label 多样本输出文本 保存训练过程损失和模型 部署到服务器 训练集构建 改为GPU运行  1.检查是否有可用的GPU&#xff0c;并根据可用性设置设备。  2.使用方法将模型和输入张量移动到GPU。.to(device)  3.将所有…

DeepSORT:高效对象跟踪算法

在自动驾驶领域&#xff0c;对象检测和跟踪是实现安全驾驶的关键技术。检测对象是第一步&#xff0c;而跟踪它们的去向则是更为复杂和关键的一环。本文将深入探讨一种先进的对象跟踪算法——DeepSORT&#xff0c;它结合了简单排序算法、卡尔曼滤波器、深度外观描述符等技术&…

Latte: Latent Diffusion Transformer for Video Generation

文章目录 AbstractIntroductionMethodology潜在扩散模型的初步研究Latte的模型变体Latte的实验验证潜在视频片段的patch embeddingTimestep-class information injectionTemporal positional embedding通过学习策略增强视频生成 Experiments Abstract Latte首先从输入的视频提…