package ExtendTest;
public class A {
private int a =1;
public int b =11;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public void B(){
this.C();
}
public void C(){
System.out.println("B->C"+a);
}
}
package ExtendTest;
public class AB extends A {
private int a =2;
public int b = 22;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public void C(){
System.out.println("AB->C"+a);
}
public static void main(String[] args){
A t = new AB();
AB t1 = new AB();
t.B();
System.out.println(t.getA());
System.out.println(t.b);
System.out.println(t1.b);
}
}
Java 在继承的时候,方法被重写this永远指向运行时的类型。所以调用的时候,总是指向new 对象实例化的对象。
但是public的属性,就不同,它指向声明的类型的属性,猜测它有可能是编译期就决定了。
public class A {
private int a =1;
public int b =11;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public void B(){
this.C();
}
public void C(){
System.out.println("B->C"+a);
}
}
package ExtendTest;
public class AB extends A {
private int a =2;
public int b = 22;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public void C(){
System.out.println("AB->C"+a);
}
public static void main(String[] args){
A t = new AB();
AB t1 = new AB();
t.B();
System.out.println(t.getA());
System.out.println(t.b);
System.out.println(t1.b);
}
}
Java 在继承的时候,方法被重写this永远指向运行时的类型。所以调用的时候,总是指向new 对象实例化的对象。
但是public的属性,就不同,它指向声明的类型的属性,猜测它有可能是编译期就决定了。