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

© 王春蕾 中级黑马   /  2014-4-12 14:32  /  1432 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我在运行一下代码时
  1. //定义一个接口
  2. interface Inter
  3. {
  4.         //接口中的两个方法
  5.         public void method1();
  6.         public void method2();
  7.         //public void method3();
  8. }
  9. //Test1实现了接口Inter
  10. class Test1 implements Inter
  11. {
  12.         public void method1()
  13.         {
  14.                 System.out.println("method1 is running");       
  15.         }
  16. }
  17. class InterDemo
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                 //实例化Test1对象
  22.                 Test1 test=new Test1();
  23.                 //调用method1方法
  24.                 test.method1();
  25.         }
  26. }
复制代码
出现了错误,
错误信息是:Test1不是抽象的,并且未覆盖Inter中的抽象方法method2,请问在实现接口时为什么要全部覆盖接口中的方法啊??

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

11 个回复

倒序浏览
Inter接口中两个方法并未初始化,你试下给方法2默认初始化下,在Test1中不实现方法2,你试下。
回复 使用道具 举报
本帖最后由 linweiwen 于 2014-4-12 14:49 编辑

要实现接口里面的全部方法,
其实更像一个规定,
因为真正开发的情况很复杂,
用接口可以增加程序的扩展性,
后期的时候也能降低维护的成本,
你不用实现的功能不写到接口里面就是了。
可以实现多个接口就是让你可以根据不同的情况,
实现不同需求的功能,比抽象类的扩展更强了。

以上是我个人的理解,楼主参考一下……

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 种一棵树 于 2014-4-12 19:20 编辑

接口中的方法,必须全部被重写,抽象类则不同,
这就是好比一个规定。如果你要使用它,就必须按照它的规则。

回复 使用道具 举报
因为在接口中的属性是静态的,方法是抽象的,就算在接口中不使用static和abstract进行对属性和方法进行修饰,那么,在接口中德属性和方法也会默认是静态和抽象的!
示例:
interface A{
      String AUTHOR = "张三" ; //等价于 :public static final String AUTHOR="张三" ;
      void  print();   //等价于:public abstract void print();
      String getInfo() ;//等价于:public abstract String getInfo() ;
}

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
接口也称为特殊的抽象类:区别在于接口不能拥有一般方法,全部方法必须声明为abstract的。
以下是接口的几个注意点吧:
    a.其成员变量一定要赋初值,且不能再被修改。(如果省略修饰符的话,其默认修饰符为 public static final)
    b.接口里的方法必须全部为抽象方法,只需声明,不用定义其处理数据的方法体。(抽象方法的默认修饰符为public abstract)
    c.在实际定义接口时,一般都会省略成员变量和成员方法的修饰符。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
这个其实就是接口和抽象类的区别之一,
接口只能被单继承,也就是一个类只能继承一个接口
抽象类就没有这个限定,可以继承多个抽象类,而且不一定要实现里面所有的方法
主要看你具体看你怎末用了。
至于为什么实现一个接口必须要实现接口里面所有的方法?
好比你内存条插入插槽你你难道只插一部分就能用了还是要全部插进去才能用呢?道理其实是一样的!~
回复 使用道具 举报
:lol我觉得这是规定。。。

这个太烦了 我还没有看出全部实现的好处在哪
回复 使用道具 举报
linweiwen 发表于 2014-4-12 14:48
要实现接口里面的全部方法,
其实更像一个规定,
因为真正开发的情况很复杂,

讲的很有道理,面向对象啊~
回复 使用道具 举报
wangkerui 发表于 2014-4-13 09:33
这个其实就是接口和抽象类的区别之一,
接口只能被单继承,也就是一个类只能继承一个接口
抽象类就没有这个 ...

楼主你的回答完全反掉了=_=
回复 使用道具 举报
Kelvinhu 发表于 2014-4-13 09:45
我觉得这是规定。。。

这个太烦了 我还没有看出全部实现的好处在哪

楼主可以看一下楼上有位从面向对象思想思考接口抽象方法必须实现的必要性,讲的很有道理的
回复 使用道具 举报

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马