一個小問題引發(fā)的思考

          Posted on 2006-10-11 20:17 久城 閱讀(262) 評論(0)  編輯  收藏 所屬分類: JavaTest

          曾經(jīng)遇到過這樣一個小問題:

          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());
          }
          }

          結(jié)果是1,而不是2.
          這個問題感覺還不錯。

          1.并不是private成員不會被繼承.事實上子類可以繼承父類的任何變量和方法。private、protected只是訪問權限而已。即使i是public的
          輸出結(jié)果也肯定是1.

          2.方法可以覆蓋,成員變量并沒有覆蓋一說,也就是子類的i和父類的i是共存在子類體內(nèi)的。父類對象中有i變量、set get兩個方法。子類class中應有i【繼承于父類對象】、i【子類對象】兩個變量、set get兩個方法【繼承于父類對象】。

          3.java中的原則是調(diào)用的是哪個類的方法,那么這個方法訪問的就是這個類中的成員。子類中沒有覆蓋public int getI()這個方法的話,那么子類調(diào)用的其實是父類的getI()方法.所以返回的是父類中的i.

          所以如果子類覆蓋了getI()方法,那么就會輸出的是子類中的i了,因為調(diào)用的是子類中的方法。

          以上是我曾經(jīng)遇到的一個問題,今天遇到另一個例子,進而進行思考!

          class A{
          ?public int m = 1;
          ?A(){
          ??System.out.println("A have construct");
          ??System.out.println(m);
          ??tt();//因為tt()方法已經(jīng)被覆蓋,所以此處調(diào)用的是子類的tt()方法;
          //子類的數(shù)據(jù)成員此時還未顯式的初始化,所以返回值為默認的0;
          }
          ?public void tt(){
          ??System.out.println(m);
          ?}
          }
          public class B extends A{
          ?public int n = 2;
          ?B(){
          ??System.out.println("B have construct");
          ??System.out.println(n);
          ??tt();
          }
          ?public void tt(){
          ??System.out.println(n);
          ?}
          ?public static void main(String args[]){
          ??B b = new B();
          ?}
          }?

          輸出結(jié)果是:
          A have construct
          1
          0
          B have construct
          2
          2

          如注釋部分的解說!
          這個例子中,B中的tt()方法已經(jīng)覆蓋了父類中的tt()方法.所以在執(zhí)行父類的構造方法時,調(diào)用的是子類的tt()方法;

          PS:
          構造一個對象的過程是:
          先父類,后子類;
          先成員變量初始化,后構造函數(shù).



          歡迎來訪!^.^!
          本BLOG僅用于個人學習交流!
          目的在于記錄個人成長.
          所有文字均屬于個人理解.
          如有錯誤,望多多指教!不勝感激!

          Copyright © 久城

          主站蜘蛛池模板: 敦化市| 思茅市| 江北区| 剑河县| 博客| 郑州市| 都匀市| 兴安盟| 余庆县| 赞皇县| 昭平县| 镇巴县| 宜宾市| 大城县| 靖安县| 四子王旗| 河北省| 砀山县| 阿克| 吴旗县| 兰溪市| 鹰潭市| 时尚| 夏邑县| 彩票| 尼木县| 河间市| 宜君县| 凉城县| 连州市| 昌江| 新巴尔虎右旗| 古浪县| 漳浦县| 鹿邑县| 上林县| 民权县| 邹平县| 霍邱县| 芜湖市| 任丘市|