gpt4 book ai didi

java - 为什么继承的公共(public)方法操作父类(super class)的私有(private)属性而不是子类?

转载 作者:行者123 更新时间:2023-12-02 04:42:08 25 4
gpt4 key购买 nike

在下面的代码中,当我运行 Test2 时,为什么它打印 null 而不是 lol?看来 config 方法修改的是 Test 类的 a 属性,而不是 Test2

但是继承操作私有(private)属性的公共(public)方法有什么意义,为什么Java要这样设计呢?

编辑:

Test不得修改。我想做的是重用 config 方法。我为 Test2 定义了一个私有(private)属性 a,但 config 只是忽略它并使用 Test 之一。方法不应该使用它所在类的属性而不是继承的父类(super class)的属性吗?

public class Test {
private String a;

public void config() {
a = "lol"
}
}

public class Test2 extends Test {
private String a;

public void print() {
config();
System.out.println(a);
}

public static void main(String[] args) {
print()
}
}

最佳答案

简而言之,目的是封装。您不需要也不能从类外部访问私有(private)内容。接受的做你想做的事情的模式是使用 getter/setter:

public abstract class Test {
public void config() {
setA("lol");
}

public abstract void setA(String value);
}

public class Test2 extends Test {
private String a;

public void setA(String value) {
a = value;
}

public void print() {
config();
System.out.println(a);
}

public static void main(String[] args) {
new Test2().print();
}
}

关于java - 为什么继承的公共(public)方法操作父类(super class)的私有(private)属性而不是子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30066429/

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