接口、类的继承调用总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值