class A {
private int i=1;
public int getI(){
return i;
}
public void setI(int i){
this.i=i;
}
}
public class B extends A {
int i=2;
public static void main (String [] args) {
B b = new B();
System.out.println(b.getI());
}
}
1.並不是private成員不會被繼承.事實上子類可以繼承父類的任何變量和方法。private、protected只是訪問權限而已。即使i是public的
輸出結果也肯定是1.
2.方法可以覆蓋,成員變量並沒有覆蓋一說,也就是子類的i和父類的i是共存在子類體內的。父類對象中有i變量、set get兩個方法。子類class中應有i【繼承於父類對象】、i【子類對象】兩個變量、set get兩個方法【繼承於父類對象】。
3.java中的原則是調用的是哪個類的方法,那麼這個方法訪問的就是這個類中的成員。子類中沒有覆蓋public int getI()這個方法的話,那麼子類調用的其實是父類的getI()方法.所以返回的是父類中的i.
所以如果子類覆蓋了getI()方法,那麼就會輸出的是子類中的i了,因爲調用的是子類中的方法。
調用父類的方法取得是父類的i.