gpt4 book ai didi

java - 我可以在 Java 中公开 protected 成员吗?我想从子类访问它

转载 作者:行者123 更新时间:2023-11-29 08:18:44 25 4
gpt4 key购买 nike

我是 Java 和 OOP 的新手,

我在 A 类中使用了一个私有(private)子类(实际上是一个结构)B,在我决定为 B 类创建一个父类 C 之前,一切都很顺利。我想公开一些 C 类的 protected 成员。

例如:

public class A {
private class B extends C {
public int product;
public int x;
public int y;
public void add() {
product=x+y;
}
}
B b=new B;
b.x=1;
b.y=2;
b.multiply();
System.out.println(b.product+"="+b.x+"x"+b.y);

public class C {
protected int x;
protected int y;
public int sum;
public C(px,py) {
x=px;
y=py;
}
public void sum() {
sum=x+y;
}
}

我明白了

Implicit super constructor C() is undefined for default constructor. Must define an explicit constructor

当然,我可以删除 extends C,然后回到我之前的状态。或者我可以做一个 getter/setter。但我认为可以理解内部结构是可以接受的,它应该能够扩展其他类。

最佳答案

编译器信息相当清楚——在 B 中你有效得到:

public B() {
super();
}

这会失败,因为 C 中没有可调用的无参数构造函数。要么引入一个无参数的构造函数,要么在 B 中提供一个显式构造函数,它使用适当的参数调用 C 中的构造函数。

请注意,我不确定拥有所有这些非私有(private)字段是个好主意 - B 中的字段隐藏 C 中的字段也不是一个好主意。你真的想要 B 的实例有两个 x 字段和两个 y 字段?您意识到它们将是不同的字段,不是吗?

如果您只想有效地提供公共(public)访问权限,您可以:

public void setX(int x) {
this.x = x;
}

public int getX() {
return x;
}

(对于 y 也是如此)并从 B 中删除额外的字段。尽管如此,您无法更改 C 中字段的实际可访问性。

关于java - 我可以在 Java 中公开 protected 成员吗?我想从子类访问它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2198629/

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