A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨兴庭 于 2013-8-7 18:02 编辑

为什么接口的子类必须实现接口中的所有方法?    如果一个类实现接口没有实现其中的全部方法  那么这个类是抽象类  为什么要全部实现其中的方法。

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

5 个回复

倒序浏览
实现借口的类是要覆写接口中的抽象方法的,非抽象方法不必,不过一般都会是抽象方法的,在抽象类中些非抽象方法也没什么意义,不重写的话也可以用已实现类的。
含有抽象方法的类必顶是抽象类,一个类实现接口没有实现其中的全部方法那么这个类也还是抽象类。
回复 使用道具 举报
接口的子类可以不必完全实现接口中的抽象方法,此时这个子类是抽象类,下面这段代码就说明接口的子类不全部实现接口中的方法是可以的:
  1. interface Person
  2. {
  3.         void walk();
  4.         void run();
  5. }

  6. abstract class Student implements Person                //Student类仅实现了Person接口中的walk方法,所以该类是抽象的
  7. {
  8.         public void walk()
  9.         {
  10.                 System.out.println("Student walk");
  11.         }
  12. }

  13. class BaseStudent extends Student                //BaseStudent类继承了抽象类 Student,并重写了Student类由Person接口继承而来但没有实现的run方法
  14. {
  15.         public void run()
  16.         {
  17.                 System.out.println("BaseStudent run");
  18.         }
  19. }

  20. class TestInterface
  21. {
  22.         public static void main(String[] args)
  23.         {
  24.                 BaseStudent s = new BaseStudent();        //建立子类BaseStudent对象,调用已实现的方法
  25.                 s.walk();
  26.                 s.run();
  27.         }
  28. }
复制代码
由此可以得出以下结论:
 有的时候需要将接口和抽象类配合起来使用,这样可以为开发者提供相当的便利性,开发者觉得哪个方便就选用哪个。这样的抽象类称为便利类。此时,便利类并不需要实现接口的所有方法,可以留给继承它的子类去实现它们。

  这么做并非是没有意义的,当你自己写的类想用接口中个别方法的时候(注意不是所有的方法),那么你就可以用一个抽象类先实现这个接口(方法体中为空),然后再用你的类继承这个抽象类,这样就可以达到你的目的了,如果你直接用类实现接口,那么所有方法都是必须实现的。
程序运行结果如图所示:

3.png (1.26 MB, 下载次数: 81)

3.png

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
抽象类可以不实现接口的方法,但该类必须声明为抽象类,让他的子类来实现. 如果他的子类还是抽象类那就再由子类的子类去实现,直到继承该类的类不是抽象类为止
  1. interface A
  2. {
  3.         void eat();
  4.         void sleep();
  5.         void play();
  6. }
  7. abstract class B implements A
  8. {
  9.         public void eat()
  10.         {
  11.                 System.out.println("吃点好的");
  12.         }
  13. }
  14. class C extends B
  15. {

  16. }

  17. class  Interface
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                 C c=new C();
  22.                 c.eat();
  23.         }
  24. }
复制代码
其中B实现A(未完全实现),C继承B,则编译报错为:

Unnamed.png (40.63 KB, 下载次数: 93)

Unnamed.png

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
抽象类需要子类继承后,覆盖全部抽象方法,建立子类对象
接口,需要子类实现,覆盖全部抽象方法,建立子类对象

抽象类中,有普通方法,子类继承后直接使用
接口中,没有普通方法,全部是抽象的方法,子类必须全部覆盖

抽象类中有构造方法,可以给体系中的子类实现成员变量的赋值
接口中定义的都是全局常量,直接调用使用

抽象类是这个继承体系的最共性内容
接口是这个体系以外的扩展内同

一个类只能继承一个类,有局限性
接口的多实现,避免了单继承的局限性

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
接口本身是一个抽象类,它里面的方法都是抽象的。如果它的子类没有全部实现它的方法,那么它的子类也就是抽象类,我们就不能去调用这个子类,不能够去实现这个子类。所以,如果想要得到接口的方法,就必须实现接口的全部方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马