首页 > 其他分享 >JTCR-继承-06

JTCR-继承-06

时间:2024-04-18 14:55:05浏览次数:32  
标签:JTCR 调用 06 继承 子类 超类 抽象类 方法 final

继承基础

class A {
  int i;
  
  void m() {
   // body
  }
}

class B extends A {
  int k;
 
  void n() {
    // body
  }
}

没有类可以成为其自身的超类(super class)。
子类不能访问超类中的 private 成员。
超类类型变量可以引用派生自该超类的子类对象,但是使用该变量只能访问超类中定义的成员,不能访问子类中特有的成员。

使用 super

子类想调用直接超类的构造器时,在构造器中使用 super() 语句,该语句代表调用超类的构造器。这个语句必须位于子类构造器中第一行(也就是作为构造器的第一条语句)。

在子类中可以使用 super 表示超类,用来访问直接超类中的成员,形式为 super.member,主要用来在子类中访问被子类中定义的变量隐藏的超类中同名的变量。

多层继承

每一层级类的 super 表示直接超类。

构造器的执行

在类的继承层次中,当某个类初始化时,初始化的顺序是回溯到该类最上面的超类,然后根据继承顺序依次调用每一层类的构造器,直到最后执行该类的构造器。

方法重写(overriding)

子类中定义的某个方法的类型签名与超类中的某个方法完全一致,则子类对象在调用该方法时,调用的是子类中定义的方法,而超类中同名的方法被隐藏,如果想要调用超类中的方法,需要在子类中使用 super

动态方法调度(dispatch)

动态方法调用是指运行时,解析重写的方法。
当超类变量引用子类对象时,如果子类中存在重写的父类方法,则在调用该方法时,调用的是子类中定义的方法。也就是在运行时调用的重写方法由对象而不是变量决定。

使用抽象类

抽象方法:

abstract type name(parameterList);

包含一个或多个抽象方法的类必须定义为抽象类。抽象类的子类要么实现抽象类中的全部抽象方法,此时该子类为非抽象类;要么必须定义为抽象类(没有实现全部抽象方法)。抽象类中可以包含非抽象方法。
抽象类不能直接使用 new 实例化,但可以作为变量的类型。不能定义抽象构造器和抽象静态方法。

final 用于继承

final type name(parameterList) {
  // body
}

final 方法不能被重写。final 方法有时会被编译器 inline 调用,此时可以提高性能。在运行时解析方法调用称为 late binding,在编译时解析方法调用(如 final 方法)称为 early binding。
final 修饰的类不能被继承,同时表示该类中所有方法都是 final 方法。
一个类不能同时被 abstract 和 final 修饰。

局部变量类型推导和继承

当一个方法可以返回不同的类(这些类有着继承关系),使用局部变量类型推导作为该方法的目标类型时,变量类型由该方法定义时的返回类型决定,而不是由实际返回对象的类型决定。

Object 类

toString() 方法返回对象的描述。在 println 语句中输出对象时,会调用对象的 toString() 方法。

参考

[1] Herbert Schildt, Java The Complete Reference 11th, 2019.

标签:JTCR,调用,06,继承,子类,超类,抽象类,方法,final
From: https://www.cnblogs.com/xdreamc/p/16359462.html

相关文章

  • JTCR-介绍类-04
    类基础类表示一个新的数据类型。简单类的一般形式:classClassName{typeinstanceVariable;//...typemethod(parameterList){//方法体}//...}有些Java应用不需要main方法。定义对象new操作符在运行时动态地给一个对象分配内存并返回指向该......
  • JTCR-数据类型、变量和数组-01
    原始类型Java是强类型语言,在编译时会检查所有变量、表达式的类型是否兼容。Java为数据定义了8种原始类型(primitivetype),分为4组:整型:byte、short、int、long,表示整数。浮点数:float、double,表示小数。字符:char,表示字符集中的元素。Boolean:boolean,表示true/false值。......
  • JTCR-运算符-02
    算术运算符算术操作符不能对boolean类型使用,可以对char类型使用,因为char类型是int类型的子集。除操作符对整数使用,结果为整数。取模运算符对整数和浮点数使用,都返回余数。在某些情况下,复合赋值操作符比它的等价形式更有效率。位运算符运算符运算结果~按位......
  • 继承 基类与派生类
    继承与派生的概念继承的概念![[Pastedimage20231225161957.png]]派生类不能访问基类中的private成员![[Pastedimage20231225162525.png]]目的![[Pastedimage20231225162600.png]]继承与复合关系类与类的关系![[Pastedimage20231225160433.png]]继承:是基类......
  • web server apache tomcat11-06-Host Manager App
    前言整理这个官方翻译的系列,原因是网上大部分的tomcat版本比较旧,此版本为v11最新的版本。开源项目从零手写实现tomcatminicat别称【嗅虎】心有猛虎,轻嗅蔷薇。系列文章webserverapachetomcat11-01-官方文档入门介绍webserverapachetomcat11-02-setup启动web......
  • 06-智能调度-运输任务
    1.任务调度1.1分析通过前面的实现,已经将相同转运节点的写入到了Redis的队列中,谁来处理呢?这就需要调度任务进行处理了,基本的思路是:查询待分配任务的车辆→计算运力→分配运单→生成运输任务→生成司机作业单也就是说,调度是站在车辆角度推进的。1.2实现这里采......
  • 06-排序 分页 过滤
    排序查询多条和全部才会用到排序排序关键字:ordering查询字符串查询字符串(QueryString)是指在URL中以问号(?)开始的部分,用于向服务器传递参数。它由一个或多个键值对组成,每个键值对之间用&符号分隔。例如,在以下URL中,查询字符串是?page=2&category=books:在django种如......
  • .net 通过特性及继承IValidatableObject完成自定义表单验证
    Model:publicclassPartAItem:IValidatableObject{[Required]publicstringTOKEN{get;set;}[Required]publicstringPROJECT_ID{get;set;}publicstringPART{get;set;}[Required]publicstringFORM_ID{get;set;......
  • 06_QT网络编程之UDP通信
    QT网络编程之UDP通信udp编程​ udp不分客户端和服务器,只需要使用一个类QUdpSocket。代码Udp.pro#-------------------------------------------------##ProjectcreatedbyQtCreator2024-04-13T23:07:41##-------------------------------------------------QT......
  • 构建之法06
    在阅读完第六章后,我深感敏捷开发的思想和实践方法对我的工作有很大的启发。在我的实际工作中,我也尝试了一些敏捷开发的做法。首先,我更加注重与团队成员的沟通和协作。我们定期召开面对面的会议,讨论项目的进展、遇到的问题以及下一步的计划。这种沟通方式不仅提高了我们的工作效率......