首页 > 编程语言 >java 继承 补充:子类能继承父类中的哪些内容?

java 继承 补充:子类能继承父类中的哪些内容?

时间:2023-01-20 14:44:43浏览次数:53  
标签:java 构造方法 继承 子类 成员 父类 方法

目录

继承内存图

父类中有:成员变量、构造方法、成员方法三部分内容。

非私有修饰符:private、...

私有修饰符:private

构造方法无论是否私有都不能继承;成员变量总是能继承(无论是否能使用);成员方法被非私有修饰符修饰时能继承,被私有修饰符修饰时不能继承。

构造方法的继承

构造方法不能继承。因为java中要求构造方法的名与类名一致,但继承的父类的构造方法名显然与子类的类名不同。

成员变量的继承

在方法区中加载字节码文件时,不仅要加载自身的字节码文件,还需要加载父类的字节码文件。在堆内存中,新建一个对象时,新开辟的空间分成两个部分,其一存储父类的成员变量,其二存储子类的成员变量。

但需要注意的是,被私有化修饰符private修饰的成员变量,虽然可以被继承,但无法被直接使用,而需要利用set/get使用。

成员方法的继承

从最顶级的父类开始,设立虚方发表,存储被非private、非static、非final修饰的方法,然后依次向后传递,依次添加虚方法,大大提升性能。虚方法表与方法重写之间关联很大。

只有虚方法表才能被子类继承。

继承的特点

成员变量的访问特点

就近原则。

先在局部位置查找,再到本类成员位置中查找,再到父类成员位置查找。如果出现成员变量重名的情况:若在成员方法中不加修饰,则会现在方法中查找,如果方法中没有则会到子类中查找,再没有才会到父类中查找;添加了this关键字以后,会跳过成员方法,不在方法中查找变量,而是直接先在子类成员变量中查找,子类中没有则会去父类中查找;添加了super关键字以后,会跳过成员方法和成员变量,直接在父类的成员变量中查找。

class Fu {
    String name = "fu";
}

class Zi {
    String name = "zi";

    public void show() {
    sout(name);
    sout(this.name);
    sout(super.name);
    }
}

成员方法的访问特点

直接调用采用就近原则,利用super修饰则去父类中取用成员方法。

class Person {

	public void eat() {
	sout("person eat.");
	}

}

方法的重写

父类的方法在子类中重新写一遍:当父类的方法不能满足子类现在的需求,需要进行方法的重写。表现为方法的声明与父类一致,使用@override(重写的注解:给虚拟机进行判读是否重写正确的标志)放在重写的方法上检校重写语法是否正确。

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

  • 重写方法的名称、形参列表必须与父类一致

  • 访问权限必须大于等于父类。(空着不写<protected<public)

  • 只有被添加到虚方发表中的方法才能被重写

class Chinese() {

	@override
	public void eat() {
	sout("chinese eat.");
	}

}

构造方法的访问特点

父类中的构造方法不会被子类继承。

但子类中所有的构造方法都会默认先访问父类的无参构造,再执行自己。因为如果父类没有完成初始化,子类将无法使用父类中的数据。所以一定要先完成父类数据空间的初始化才会进行子类的初始化。

标签:java,构造方法,继承,子类,成员,父类,方法
From: https://www.cnblogs.com/xiaoaozi/p/17061634.html

相关文章

  • Java反编译
    Java反编译java在编译的过程中会将源代码进行一次预编译,编译成后缀名为class的字节码源文件后将.class文件转载进类装载器中从而加载到jvm中,加载到jvm中后字节码校验器会......
  • Java/JS/Python/Go语言设计模式大全【精品源码】
    DesignPattern23种经典设计模式源码详解经典设计模式源码详解,用不同语言来实现,包括Java/JS/Python/TypeScript/Go等。结合实际场景,充分注释说明,每一行代码都经过检验,确......
  • JAVA实现MQTT通讯介绍
    JAVA实现MQTT通讯介绍    MQTT(消息队列遥测传输)是ISO标准(ISO/IECPRF20922)下基于发布/订阅范式的消息协议。它工作在TCP/IP协议族上,是为硬件性能低下的远程设......
  • 【并发编程】原子类
    文章目录​​1.什么是原子类​​​​2.原子更新基本类型​​​​3.原子更新数组类型​​​​4.原子地更新属性​​1.什么是原子类(1)原子类简介一度认为原子是不可分割的最小......
  • JavaScript 函数所能传递的最大参数
    取决于实现,取决于浏览器和操作系统标准没有规定(65535一般是有的)来源:https://stackoverflow.com/questions/22747068/is-there-a-max-number-of-arguments-javascript-fun......
  • 【java技术总结】Java 数组转 list(列表)的最全方法(含 java8、java9、java10)
    对象数组转列表Collections.addAll(推荐方式)如果jdk1.5版本以上,推荐如下方法,且返回的列表对象,可以进行数据的增删改查操作:String[]strings=newString[]{"a","b",......
  • Javascript数字精度丢失的问题,如何解决
    一、问题分析计算机存储以二进制的方式,而0.1在二进制中是无限循环的一个数字,所以会出现裁剪,精度丢失会出现,0.100000000000000002===0.1,0.200000000000000002===0.2......
  • javascript的防抖与节流
    一、节流一段时间内只能触发一次,如果这段时间内触发多次事件,只有第一次生效会触发回调函数,一段时间过后才能再次触发(一定时间内只执行第一次)应用场景1、鼠标连续不断......
  • Java 中九种 Map 的遍历方式,你一般用的是哪种呢?
    日常工作中Map绝对是我们Java程序员高频使用的一种数据结构,那Map都有哪些遍历方式呢?这篇文章阿粉就带大家看一下,看看你经常使用的是哪一种。通过entrySet来遍历......
  • Java Stream常见用法汇总,开发效率大幅提升
    Java8新增的Stream流大大减轻了我们代码的工作量,但是Stream流的用法较多,实际使用的时候容易遗忘,整理一下供大家参考。1.概述Stream使用一种类似用SQL语句从数据......