黑马程序员技术交流社区

标题: 抽象类i和接口 [打印本页]

作者: wyy283    时间: 2013-7-25 10:52
标题: 抽象类i和接口
抽象类i和接口到底有什么区别?

作者: Angel♥儱唲    时间: 2013-7-25 10:58
抽象类和接口异同:
相同:
1,都可以在内部定义抽象方法。
2,通常都在顶层。
3,都不可以实例化,都需要子类来实现。
不同:
1,抽象类中可以定义抽象方法和非抽象方法,
      而接口中只能定义抽象方法。
2,接口的出现可以多实现。
      抽象类只能单继承。
      也就是说:接口的出现避免了单继承的局限性。
3,继承和实现的关系不一致。继承:is a,实现:like a
作者: 小时晚er    时间: 2013-7-25 11:01
抽象类中可以有非抽象方法,接口里只要有方法就是抽象方法,只要是声明了变量就一定是常量 final类型,不可能是别的,
一个类只能继承一个抽象类,但是一个类可以实现多个接口,
作者: 小时晚er    时间: 2013-7-25 11:05
在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
接口中的方法默认都是 public,abstract 类型的。
我不是灌贴,刚才楼上按错了,回答谢了一半就给发出去了,下载在下面街上
作者: 曹奎    时间: 2013-7-25 11:10
1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。

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

  3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

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

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

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

  7.接口中的方法默认都是 public,abstract 类型的。
作者: 张俊生    时间: 2013-7-25 11:17
这个问题出现好多次了,你看看以前发帖的回答就基本明白了
作者: 尼玛可乐    时间: 2013-7-25 11:49
接口是特殊抽象类。如果抽象类中所有方法都是抽象的,那么该类可以用接口的形式来表现。
作者: chilong_333    时间: 2013-7-25 16:00
又来问这个问题来的,抽象类是一个声明方法的类,只有声明没有实现。
接口是一个功能,需要你所实现的东西,也就是说抽象类是一个XX,接口是可以做XX。
作者: 深圳在漂移    时间: 2013-7-25 16:55
接口一般来讲是形成规范时使用
例如,KFC的餐厅需要一个厨房,5个厨师,10个服务员
这个就是用接口定义的

抽象类一般用来简化类
当多个类(一般是同用途的泪)中含有共同的方法和属性时,将共同的方法和属性抽取出来放在一个抽象类中,所有的类都继承他,并实现它
作者: 深圳在漂移    时间: 2013-7-25 16:55
接口一般来讲是形成规范时使用
例如,KFC的餐厅需要一个厨房,5个厨师,10个服务员
这个就是用接口定义的

抽象类一般用来简化类
当多个类(一般是同用途的泪)中含有共同的方法和属性时,将共同的方法和属性抽取出来放在一个抽象类中,所有的类都继承他,并实现它
作者: yangchao313    时间: 2013-7-25 17:53
       1).抽象类可以有实现(包括构造函数),而接口不可以有任何实现,重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。接口中所有方法都必须是未实现的。
    2).抽象类中还以有成员变量(包含静态成员变量)、属性、常量和静态方法,并且他们可以是非公共的;而接口中不能有成员变量、常量、静态方法,只能有公共的属性。
    3).抽象类可以从另一个类或者一个/ 多个接口派生;而接口不能从另一个类派生却可以实现另一个或多个接口。
    4).一个.net 类只能从一个基类中派生即使这个基类是抽象类;然而一个.net 类可以实现多个接口。(但是如果从一个抽象类派生或者从一个/ 多个接口实现,则必须实现抽象类中抽象方法或接口中所有的方法)

   相同点:1)、不能实例化;
       2)、包含未实现的方法声明;
       3)、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);

抽象类和接口的使用:
      1)如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。
      2)如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。
      3)如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。   
      4)抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。




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