接口、类的继承调用总结

总结一下吧接口类的继承调用吧。
首先定义一个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.你想调父类的方法来调用父类的方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章