接口、類的繼承調用總結

總結一下吧接口類的繼承調用吧。
首先定義一個A類

 class A {
    public void test(){
          Log.d("sdf","hello world");
     }
    public void a(){
      Log.d("sdf","hello world-----A");
    }
  }

定義一個接口C

public interface  C{
     void inWork();
  }

再定義一個B類

 class B extends A implements C{
    public void test2(){
          Log.d("sdf","hello world2");
      }

      @Override
      public void inWork() {

      }
  }

然後如下調用

    A a=new B();
    ((B) a).test2();

成功輸出hello world2字符串
繼續調用如下代碼

  A a=new A();
  ((B) a).test2();

報錯java.lang.ClassCastException:

繼續調用如下代碼

//B類爲 接口實現類 c爲接口實例
 C c=new B();
 ((B) c).test2();

成功輸出hello world2字符串

總結1
由子類 實現 父類的實例

接口實例
纔可以
強轉成
子類

強轉成
接口實現類
然後才能調用
子類

接口實現類
的方法。


繼續執行以下代碼,調用父類的test父法

  B b=new B();
  b.test();

成功調用父類的test方法,輸出hello world字符串

然後 給B類添加以下代碼,覆寫父類test父法

 @Override
 public void test() {
         Log.d("sdf","i override");
     }

再次執行

  B b=new B();
  b.test();

只輸出了i override字符串,沒有調用父類的test方法
修改B類代碼如下所示

 @Override
  public void test() {
        Log.d("sdf","i override");
        super.test();
    }

再次執行

  B b=new B();
  b.test();

發現輸出了i override字符串 和 hello world字符串,說明父類A的test方法,被子類B覆寫test方法的super.test()調用了。

再次修改B類 test方法

 public void test() {
       super.a();
        super.test();
        Log.d("sdf","i override");
    }

結果顯而易見,依次輸出

 hello world-----A
 hello world
 i override

總結2
子類實例可以直接調用父類的方法
但是如果
子類實例調用的方法被子類覆寫了,子類實例只能調用子類覆寫的方法
如果想調用父類中的方法
只能在子類覆寫的方法用super.你想調父類的方法來調用父類的方法。


最後兩個總結如下

  1. 由子類 實現 父類的實例

    接口實例
    纔可以
    強轉成
    子類

    強轉成
    接口實現類
    調用
    子類

    接口實現類
    的方法。
  2. 子類實例可以直接調用父類的方法
    但是如果
    子類實例調用的方法被子類覆寫了,子類實例只能調用子類覆寫的方法
    如果想調用父類中的方法
    只能在子類覆寫的方法用super.你想調父類的方法來調用父類的方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章