黑马程序员技术交流社区

标题: 接口里边有抽象方法,抽象类也有抽象方法 [打印本页]

作者: youngster    时间: 2013-6-4 15:19
标题: 接口里边有抽象方法,抽象类也有抽象方法
这两者之间有什么区别,应用的时候又该注意什么
作者: 山鹰    时间: 2013-6-4 15:23
接口是特殊的抽象类
接口中的方法必须是抽象的,而抽象类中可以有不抽象的方法
作者: 刘海芳    时间: 2013-6-4 15:28
区别:
1、接口定义的方法默认都是抽象的方法,无需加上abstract关键字。而抽象类中的抽象方法必须用abstract关键字修饰,否则就为普通方法。
2、接口的方法都是publi的,即使你用public关键字修饰,虚拟机在编译时会也转换成public。而抽象的抽象方法可以是public,还可以是protected的。
作者: 闫月乐    时间: 2013-6-4 15:43

1,格式问题接口中的抽象方法是固定的:|-- 成员变量     public static final 数据类型 变量名 = 值  |-- 成员方法     public abstract 返回值类型  方法名();而抽象类中的抽象方法是不固定的.2,主体内容抽象类中一般定义的是继承体系中的共性内容(因为是单继承,把共性内容定义到抽象类中,一次继承就完事)而接口中一般定义的是体系中的扩展内容(比如说,都是人,会学习,学什么不知道,所以是抽象的,而学习这个功能时共性的,所以可以把这个功能放到抽象类中.而人不是每一个都抽烟的,所以可以把这个抽烟的功能放到接口中,所以烟民可以继承学习方法,实现抽烟方法而非烟民直接继承学习方法即可.而且,不只会有抽烟,还会有开车,唱歌等等扩展的功能.用接口可以多实现,提高了扩展性!3接口中只能有抽象内容,子类使用,必须覆盖而抽象类中,可以有非抽象的方法,可以直接被子类调用.




作者: 郑锐    时间: 2013-6-4 15:46
1.接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,
2.实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
3.还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
作者: 不破大地    时间: 2013-6-4 19:26
我觉着,其实抽象类和接口实际上就是一个东西,但是从面向对象的角度去思考,抽象类是个类、是现实世界中存在的东西;
而接口就只是为了完成某功能而抽取出的东东了,比如 人 可以是个抽象类,人员管理 那就是接口了。
作者: 王瀛    时间: 2013-6-4 19:45
抽象类中可以有非抽象方法,甚至可以全都是非抽象方法。抽象类用absctract修饰
抽象类是被继承的 extends
抽象类只能被单继承

接口中一定都是抽象方法,并且接口中成员方法默认被 public abstract修饰,成员变量默认被public static final修饰 (默认这样修饰,即便没有显示的用代码的形式打出来,系统也会默认的强制加上)
接口是被实现的 implements
接口可以被多实现
作者: 孔雀东南飞    时间: 2013-6-5 21:28
楼主:
1、接口里全都是抽象方法,不存在非抽象方法,只不过abstract省略了;而抽象类中,必然存在至少一个抽象方法,但可以存在非抽象方法。
2、子类与抽象类之间是继承关系,子类可以全部重写抽象父类的方法,也可以重写一部分(但此时子类必须是抽象的);类与接口之间是实现关系,且必须全部重写接口里的方法。
3、一个子类只能有一个父类;一个类可以实现多个接口。
作者: 王林涛    时间: 2013-6-6 09:14
接口是特殊的抽象类,接口中的方法必须是抽象的!
可是抽象类中有抽象方法,也有非抽象方法!
作者: librazeng    时间: 2013-6-8 08:47
本帖最后由 librazeng 于 2013-6-8 08:50 编辑

(1)定义:描述对象信息不够具体的类,就是抽象类。接口是一种特殊的抽象类。
(2)设计层面区别:
抽象类允许子类继承,只能单继承,是is a关系;接口要求子类实现,可以多实现,是like a关系。也就是说,抽象类定义了同类事物的本质属性和方法,子类和抽象类是一类事物;接口则定义了特殊的属性和方法,实现类只是实现了接口定义的契约,两者并不要求是同类事物。比如:
我们定义一个美女的抽象类,先分析哪些是美女的本质,哪些是特质。
本质的东西,性别(天然属性),产地,曲线,话语(搞个必备动作);
特质的东西,如唱歌,跳舞。
那就可以把本质的东西定义在抽象类中,特质的部分定义在接口中。
  1. abstract class Builty{
  2. public static final String sex="female";
  3. public String area;
  4. abstract void setArea(String area);
  5. abstract void profile();
  6. public void speak(){
  7. System.out.println("ya mei dei");
  8. }
  9. }
  10. interface Miss{
  11. public abstract void sing();
  12. public abstract void dance();
  13. }

  14. class Tao extends Builty implements Miss{
  15. public void setArea(String area){
  16. this.area=area;
  17. public void profile(){
  18. System.out.println(“有沟”);
  19. public void sing(){
  20. System.out.println(“会唱英文歌”);
  21. }
  22. public void dance(){
  23. System.out.println(“会跳钢管舞”);
  24. }
  25. }
  26. }
  27. }
  28. }
复制代码
(3)语法层面区别:
抽象类:带有抽象方法,用abstract关键字,子类只能单继承,抽象类也可以继承接哦(缺省适配模式),不能实例化
接口:方法全是抽象方法public abstract,用interface关键字,如有成员变量需定义成public static final,多实现,接口也能多继承其他接口
参考资料:
http://blog.163.com/ichuanbo@126/blog/static/1667061462013411103436485/




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2