總結一下吧接口類的繼承調用吧。
首先定義一個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.你想調父類的方法
來調用父類的方法。
最後兩個總結如下
- 由子類 實現 父類的實例
或
接口實例
纔可以
強轉成
子類
或
強轉成
接口實現類
調用
子類
或
接口實現類
的方法。 - 子類實例可以直接調用父類的方法
但是如果
子類實例調用的方法被子類覆寫了,子類實例只能調用子類覆寫的方法
如果想調用父類中的方法
只能在子類覆寫的方法用super.你想調父類的方法
來調用父類的方法。