我有一个班级
public class A {
public String attr ="A attribute";
public void method() {
System.out.println(this+" , "+this.attr);
}
public String toString() {
return("Object A");
}
}
以及另一个继承自它的类
public class B extends A{
public String attr = "B attribute";
public void method() {
super.method();
}
public String toString() {
return("Object B");
}
}
注意,B
的 method()
只是 A
的 method()
的一个包装器。当我运行以下代码时:
B b = new B();
b.method();
我得到对象B,A属性
作为输出,这意味着this
和this.attr
访问了不同的东西。为什么会这样?
System.out.println(this)
不应该引用类A
的toString()
方法吗?
attr
的定义上显示一个警告,提示它“遮蔽”了超类中同名的字段。 - Mark Jeronimus