总结一下吧接口类的继承调用吧。
首先定义一个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.你想调父类的方法
来调用父类的方法。