用 class B 扩展 class A,但无法在 class B 方法中达到 class A 的属性
Extending class A with class B, but can't reach attributes of class A in class B methods
所以如果我有两个这样的 classes:
public class A extends B{
public String name = "Alpha"
}
public class B{
public void revealAName(){
print(this.name);
}
}
main(){
A newA = new A();
newA.revealName();
}
在这种情况下,Eclipse 表示属性名称不存在。为什么这么说?当我在 class B 的方法中时,为什么我不能使用 class A 对象的属性?我该如何解决?
B
对 A
中的属性一无所知,两个 class 都可以单独编译。
但如果您将其更改为 B extends A
,则可以从派生的 class (B
):
访问 name
class A {
String name = "Alpha";
}
class B extends A {
public void revealAName(){
print(this.name);
}
}
A a = new A();
a.name; // OK
a.revealName(); // not OK
B b = new B();
b.name; // OK
b.revealName(); // OK
首先,应该只有一个 public class 应该包含 main 方法。
其次,您正在使用继承。因此,您必须将基础 class 变量的访问修饰符赋予 "protected" 才能在子 classes 中进行访问。所以,应该是:
受保护的字符串名称 = "Alpha";
因为 "default" 访问修饰符不允许子 class 访问。来自 controlling access to members of class
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
另一件事,您使用了 'this.name' 试图获取 class B 的 'name' 变量。这就是它显示错误的原因。
使用继承时,您可以直接使用父 class 的变量而不使用任何对象引用,或者您可以使用 "super" 作为对象引用以防变量名重复。
You can refer this image in case of doubt..
希望,现在就清楚了。
所以如果我有两个这样的 classes:
public class A extends B{
public String name = "Alpha"
}
public class B{
public void revealAName(){
print(this.name);
}
}
main(){
A newA = new A();
newA.revealName();
}
在这种情况下,Eclipse 表示属性名称不存在。为什么这么说?当我在 class B 的方法中时,为什么我不能使用 class A 对象的属性?我该如何解决?
B
对 A
中的属性一无所知,两个 class 都可以单独编译。
但如果您将其更改为 B extends A
,则可以从派生的 class (B
):
name
class A {
String name = "Alpha";
}
class B extends A {
public void revealAName(){
print(this.name);
}
}
A a = new A();
a.name; // OK
a.revealName(); // not OK
B b = new B();
b.name; // OK
b.revealName(); // OK
首先,应该只有一个 public class 应该包含 main 方法。 其次,您正在使用继承。因此,您必须将基础 class 变量的访问修饰符赋予 "protected" 才能在子 classes 中进行访问。所以,应该是:
受保护的字符串名称 = "Alpha";
因为 "default" 访问修饰符不允许子 class 访问。来自 controlling access to members of class
Modifier Class Package Subclass World public Y Y Y Y protected Y Y Y N no modifier Y Y N N private Y N N N
另一件事,您使用了 'this.name' 试图获取 class B 的 'name' 变量。这就是它显示错误的原因。
使用继承时,您可以直接使用父 class 的变量而不使用任何对象引用,或者您可以使用 "super" 作为对象引用以防变量名重复。 You can refer this image in case of doubt..
希望,现在就清楚了。