我有两个A和B类
public class A {
public String a = "hey";
public void printA() {
System.out.println(a);
}
和
public class B extends A{
public String a = "Jude";
}
我需要做什么才能使以下行的输出为Jude
B object = new B();
object.printA(); //This should output Jude
答案 0 :(得分:0)
您无法从超类访问子类字段。但是你可以在子类中更改它:
public class B extends A {
B() {
this.a = "Jude";
}
}
这样您就不会声明新字段,而是更改现有字段的值。请注意,extends A
是指定B
是A
的子类所必需的。
或者,您可以考虑使用方法而不是字段:
public class A {
public String getA() {
return "hey";
}
public void printA() {
System.out.println(getA());
}
}
public class B extends A {
@Override
public String getA() {
return "Jude";
}
}
注意,Java中的“变量”术语通常应用于方法中声明的局部变量。你说的是“场”,而不是“变量”。
答案 1 :(得分:0)
只需将你的a声明改为this.a就好了。
public class B extends A{
B(){
super();
//Could hardcode this.a to "Jude" here if you want.
}
B(String word){
super();
this.a = word;
}
}
a已经从超类A为B定义,所以你需要使用"这个"访问它。
您可以像这样使用
B object = new B("Jude");
object.printA(); //"Jude"
答案 2 :(得分:0)
无法覆盖字段。方法可以;改用方法:
public class A {
public String getA() {
return "hey";
}
public void printA() {
System.out.println(getA());
}
}
public class B extends A {
public String getA() {
return "Jude";
}
}
这就是全部。如果在这些类之外没有调用getA()
,则cincdider将其设为protected
。
答案 3 :(得分:-2)
Java®语言规范,Java SE 8版
如果类声明了具有特定名称的字段,那么 据说该领域的声明隐藏任何和所有可访问的 超类中具有相同名称的字段的声明,和 班级的超级接口。
不确定如果我需要为观众进一步解释它,但你不能“在java的继承函数中使用局部变量的值”,为什么?见上文。