public class testA {
public static void main(String args[]) {
test1 t3 = new test2();
System.out.println(t3.a);
System.out.println(t3.getA());
}
}
class test1 {
String a = "aaaa";
public String getA() {
return a;
}
test1() {
System.out.println(a);
}
}
class test2 extends test1{
String a = "bbbb";
public String getA() {
return a;
}
test2() {
System.out.println(a);
}
}
不明白输出结果,为什么t3.a是aaaa,而t3.getA()是bbbb,请大侠们帮解释一下。
public static void main(String args[]) {
test1 t3 = new test2();
System.out.println(t3.a);
System.out.println(t3.getA());
}
}
class test1 {
String a = "aaaa";
public String getA() {
return a;
}
test1() {
System.out.println(a);
}
}
class test2 extends test1{
String a = "bbbb";
public String getA() {
return a;
}
test2() {
System.out.println(a);
}
}
不明白输出结果,为什么t3.a是aaaa,而t3.getA()是bbbb,请大侠们帮解释一下。
所以,调用t3.getA()时候,调用的是子类版本的getA()方法,也就是test2中定义的getA()方法,所以显示,bbb
但是,千万注意,变量的取值只和声明它的类型有关系,变量不支持多态,你在main中写,test1 t3 = new test2(); 所以,t3.a实际上采用的一定是t1中定义的a 的值,无论等号后面是什么。
所以,t3.a显示的是aaaa
但你调用父类的方法,其已被子类override,而对象自身又是子类 test2,所以调用的是子类的getA,当然使用的也是子类的 bbbb
像这样: aaaa
bbbb
aaaa
bbbb
t3.getA()子类重写了父类的getA()方法,new的是子类,所以调用子类方法 为bbbb
test1 t3 = new test2();
先调用了父类的构造,后调用了子类的构造函数。。
public static void main(String args[]) {
test1 t3 = new test2();
System.out.println(t3.a);
System.out.println(t3.getA());
}
}
class test1 {
String a = "aaaa";
public String getA() {
return a;
}
test1() {
System.out.println(a);
}
} class test2 extends test1{
String a = "bbbb";
public String getA() {
return a;
}
test2() {
System.out.println(a);
}
}
不明白输出结果,为什么t3.a是aaaa,而t3.getA()是bbbb,请大侠们帮解释一下。