先上图
上代码
首先对类进行一个简要的介绍
A(父类)
包含属性name和age并带有默认值
B(子类1)
包含属性name和age没有默认值
C(子类2)
没有任何属性完全继承自父类
package ThisAndSuper;
public class A {
String name="父类默认name";
int age=0;
public void test() {
System.out.println("我是父类的test()方法");
System.out.println("父类中的toString=====》"+this.toString());
System.out.println("父类姓名=" + this.name + " 父类年龄=" + this.age);
}
}
package ThisAndSuper;
public class B extends A{
String name;
int age;
public void test() {
super.test();
System.out.println("super.name="+super.name);
System.out.println("子类B的test()方法");
System.out.println("子类B中的toString=====》"+this.toString());
System.out.println("子类B姓名=" + this.name + " 子类B年龄=" + this.age);
}
}
package ThisAndSuper;
public class C extends A{
public void test() {
super.test();
System.out.println("子类C的test()方法");
System.out.println("子类C中的toString=====》"+this.toString());
System.out.println("子类c姓名(this)=" + this.name + " 子类c年龄(this)=" + this.age);
System.out.println((this.name==super.name)&&(this.age==super.age));
}
public static void main(String[] args) {
B b = new B();
C c = new C();
b.name="bname";
b.age=10;
b.test();
c.test();
}
}
运行结果
从运行结果来分析
1.A和B与A和C中的this的toString结果分别都是一样的,证明了父类和子类中的this是同一个this,也就是在Main中实例化的B对象b和实例化的C对象c。
2.由于this的toString结果分别一致,所以也证明了super并没有构造父类对象,super可以 . 出test()和name并且name的属性值也是父类中默认的属性值,也证实了super指向父类中可继承的变量和父类中可继承的方法。
2.A和B属性的输出结果不一致,A中输出的结果为父类中默认的属性值而子类输出的结果为子类自己实例化的属性值,证明了在父类和子类中this的指向不同,子类中指向的是子类成员变量和子类成员方法,父类中指向的是父类可继承成员变量和父类可继承成员方法。
3.A和C中属性输出的结果是一致的并且代码中对this.name和this.age与super.name和super.age的比较结果返回值为true,这证明了在子类并没有自己声明属性时,子类中的this指向的是父类中可继承的属性和父类中可继承的方法。
注(本文中第一张图片来源于网络,如涉及侵权请联系删除)