public class Test { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
B b=new B();
b.bb();
}}
class A{
String a="a";
public void visit(){
System.out.println(this.a);
System.out.println(this.getClass());
}
}
class B extends A{
String a = "b";
public void bb(){
visit();
}
}最后答案输出的是 a
class B也就是说this指代的是当前对象是没有错的,在这里面this指的是B的实例,但是为什么this.a却输出的是其父类A中的属性a的值呢? 这种是多态么?能给说明一下么?
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
B b=new B();
b.bb();
}}
class A{
String a="a";
public void visit(){
System.out.println(this.a);
System.out.println(this.getClass());
}
}
class B extends A{
String a = "b";
public void bb(){
visit();
}
}最后答案输出的是 a
class B也就是说this指代的是当前对象是没有错的,在这里面this指的是B的实例,但是为什么this.a却输出的是其父类A中的属性a的值呢? 这种是多态么?能给说明一下么?
第二个输出class B 是因为getClass()方法是不能被子类覆盖的。所以执行this.getClass()就是执行super.getClass(),得到的是子类。如果想得到父类,应该用this.getClass().getSuperclass()
所以执行this.getClass()就是执行super.getClass(),得到的是子类 这句话不能理解,怎么会是执行的super.getClass()?
您的意思是这个this指的是父类么?那么this.getClass打印出来的为什么会是子类?
class B extends A {
{
a = "b";
}
public void bb() {
visit();
}
}
跟a是不是public有啥关系?
更不是啥覆盖继承的问题,所有类都默认继承Object,而是不是从父类来继承Object
因此每个类都有自己的Object.getClass()方法this引用的是本类对象,查看Object.getClass方法可以看到:返回此 Object 的运行时类。运行时类,这个词很形象。所以不是this没理解到位,是getClass没理解到位。