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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冷叙辰 中级黑马   /  2013-3-14 11:37  /  1166 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冷叙辰 于 2013-3-14 18:51 编辑

什么时候用接口什么时候用抽象类?

4 个回复

倒序浏览
抽象类和接口的区别:
1.抽象类 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个接口。

  2.在抽象类 中可以有自己的数据成员,也可以有非抽象的成员方法,而在i接口中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 接口中一般不定义数据成员),所有的成员方法都是抽象的。

  3.抽象类和接口所反映出的设计理念不同。其实抽象类表示的是"is-a"关系,i接口表示的是"like-a"关系。

  4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

  5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

  6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

  7.接口中的方法默认都是 public,abstract 类型的。

 

  抽象类和接口 是 Java语言中的两种定义抽象类的方式,它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概 念本质的理解、对于设计意图的反映是否正确、合理,因为它们表现了概念间的不同的关系。

评分

参与人数 1技术分 +1 收起 理由
scott0610 + 1 赞一个!

查看全部评分

回复 使用道具 举报
根据我自己的理解,看是谁给你提供方法。是jdk的类,还是别人给你写的。根据情况的不同,你调用的时候也有相应的不同。选择一个最优的方式就可以!不用那么较真
回复 使用道具 举报
  1. abstract class Student
  2. {
  3. abstract void study();//子类一定会做(学习),但学的东西不一样,就用抽象方法
  4. void sleep()//子类一定会做,而且做的都一样,就用一般方法
  5. {
  6. System.out.println("sleep");
  7. }
  8. }
  9. interface Smoking//有些子类做(抽烟)有些不做(抽烟),用接口
  10. {
  11. void smoke();
  12. }
  13. class ZhangSan extends Student implements Smoking//zhangsan抽烟就用接口实现
  14. {
  15. void Study(){}
  16. public void smoke(){}
  17. }
  18. class LiSi extends Student //LiSi不抽烟就不用接口
  19. {
  20. void Study(){}
  21. }
  22. class InterfaceTest
  23. {
  24. public static void main(String[] args)
  25. {
  26. System.out.println("Hello World!");
  27. }
  28. }
复制代码
总结来说:子类都会做,而且做的事实一样的就用一般方法
                  子类都会做,但做的事不一样就用抽象方法
                  子类有些做,有些不做就用借口
回复 使用道具 举报
毕老师视频讲到过,我整理在这里,希望对你有用、
抽象类:
当多个类中出现相同功能,但是功能主体不同,这时的可以进行向上抽取的,只抽取功能和定义,而不抽取功能主体。
抽象类特点:
1.抽象方法一定在抽象类中
2.抽象方法和抽象类必须被abstract关键字修饰
3.抽象类不可以用new创建对象,因为调用抽象方法没意义
4.抽象类中的方法要被使用,必须由子类复写所有方法后建立子类对象调用。如果子类只覆盖了部分抽象方法,那么子类还是一个抽象类。

如果描述一个事物时有不确定的部分,也是事物的功能,需要明确出现,但是无法定义主体,通过抽象方法来表示。
例如://每个班级的学生都有学习的功能但是学习的方法不一样,要创建子类对象然后 复写study方法。
abstract class Student
{
     abstract void study();
}

接口:
初期理解是一个特殊的抽象类
当抽象类中的方法都是抽象的,那么该类就是通过接口形式来表示。
接口中的成员都是Public的
接口是不可以创建对象的因为有抽象方法。全部覆盖后,子类才可以实例化,否则子类是一个抽象类
接口可以被多实现。
java存在多继承,只有一在接口和接口之间。
java在类中只有单继承,多继承通过实现来完成。

个人总结
继承是is a,子类是父类的一种。
实现是 like a用接口更容易提高功能的扩展。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

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