gpt4 book ai didi

Java通过 protected getter访问私有(private)父类(super class)成员

转载 作者:行者123 更新时间:2023-11-29 07:36:21 25 4
gpt4 key购买 nike

我知道在 Java 中,只要父类(super class)提供公共(public)或 protected getter 方法,就可以在子类中访问父类(super class)的私有(private)成员。但是我也知道子类实际上并没有继承私有(private)成员。考虑以下情况....

Class A {
private var = 2;
protected int getVar(){
return var;
}
}

Class B extends A{

public void printVar(){
System.out.println(getVar());
}
}

Class Main{

public static void main(args []){

B b= new B();
b.printVar();
}
}

我想知道,既然我们正在创建子类 B 的实例,那么那个私有(private)成员究竟是什么以及什么时候分配给内存的,它的范围是什么?由于实际上从未创建过 A 的实例,它是如何存在的呢?它不是静态变量,也不是最终变量,所以它是堆栈动态的还是隐式堆动态的?我认为,当您从父类(super class)实例化子类时,您也继承了非私有(private)成员和方法,然后将它们实例化为子类的对象实例的一部分(除非它们被重写等),所以只有一个对象分配为堆动态变量。但是,如果这些私有(private)成员没有被继承,那么编译器是否仅在调用继承的 getter 方法时提供对它们的堆栈动态引用,并且仅在这种情况下?

最佳答案

您关于父类(super class)的私有(private)成员不被子类继承的假设是错误的。所有成员都是继承的。子类的私有(private)成员是子类实例的一部分,但不能被子类的代码直接访问。

在返回私有(private)成员值的父类(super class)中有一个 protected getter 为子类提供了一种访问私有(private)成员值的方法(尽管它不能修改它,除非你也有一个 protected 或父类(super class)中的公共(public) setter )。

关于Java通过 protected getter访问私有(private)父类(super class)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35349188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com