黑马程序员技术交流社区

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

作者: asky_yu    时间: 2015-8-19 17:11
标题: 接口和抽象类
主要怎么区分?
作者: Summer910925    时间: 2015-8-19 21:07
接口中只能定义抽象方法,不能有构造方法,不能有成员变量
抽象类中可以有构造方法,可以有成员变量,可以有非抽象方法,但至少要有一个抽象方法

抽象类要想使用,必须被继承,接口要想使用,必须要被子类实现
类与类之间是继承关系,接口与接口之间也是继承关系
一个类在继承某个类的同时,还可以实现多个几口
作者: 以梦为马123    时间: 2015-8-19 21:32
最直接的:抽象类中可能有抽象方法,也可以有非抽象的方法。而接口类中必须所有的方法都是抽象的。
作者: 范兵锋    时间: 2015-8-19 21:40
接口可以理解为是抽象类中的一种特殊抽象类,接口中全是抽象方法
抽象类中可以有抽象方法,也可以没有抽象方法,也可以有构造和普通方法,但是接口里只能有抽象方法
作者: chenguozhu0808    时间: 2015-8-19 21:50
接口中没有构造方法,接口中的变量是最终变量,也就是常量,接口中只有抽象方法,抽象类中可以有抽象方法,也可以有非抽象方法
作者: 秋天中の夏季    时间: 2015-8-19 22:06
简单来说,
接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,

另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。

还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
作者: 黑马的味道    时间: 2015-8-19 22:28
1.抽象类是类,它的子类不能再继承其它类了,
但可以实现一个和多个接口。接口不是类,
它的子接口可以继承多个接口。
2.抽象类中是可以有不用abstract修饰的方法,
而接口中只能有抽象方法,即方法都要用abstract修饰。
3.抽象类可以实现接口,而接口是不能继承或实现抽象类的。
作者: yuZhe_toString    时间: 2015-8-20 15:36
本帖最后由 yuZhe_toString 于 2015-8-20 15:51 编辑

光知道区别没多大意义,首先要弄清接口和抽象类的功能,还有各自的使用场景。
接口主要是作为对象间通信的一种协议,因为他的所有方法都是抽象的,既然是抽象就可以作为契约。
只要对象实现了接口,那也就是默认遵循了契约,可以在对象通信间保持良好的通信协议,也就是降低对象间的耦合度,适合业务的扩展。
抽象类,既然提到了类,那它的扩展只能通过类之间的继承,继承是一种强耦合行为,因此抽象类一般都是在业务上的不断抽取,从而达到提高代码的复用性。

无论是抽象类还是接口都是面向对象中多态的完美体现,好好思考多加练习,慢慢就悟出来了。

作者: mmppp    时间: 2015-8-20 15:59
1 抽象类里面的成员变量可以是变量,可以是常量.
接口里面的成员变量全部是常量.
2 抽象类里面的方法可以是抽象方法,也可以是非抽象的方法.
但是接口里面的方法全部是抽象方法.
3 抽象类里面有构造函数,接口里面没有.因为抽象类是类,需要子类继承.子类继承了之后可能会使用父类
里面的一些成员变量,所以定义构造函数进行初始化.
4 抽象类与类之间的关系是继承,所以一个类只能继承一个抽象类.
而接口与类之间的关系是实现,一个类可以实现多个接口.而接口与接口之间是继承,
但是可以多继承.所以java的多继承出现在了接口中.
5 为什么会有抽象类和接口呢.主要是他们的内容的不同.抽象类里面定义的是子类里面的共性的,必须要有的
功能.但是这些功能不同的子类可能会有不同的具体实现细节,所以不写方法体.让子类自己去补充,这样也可以
让他们强制性的去完成,以免忘记.
而接口里面定义的是对象的拓展功能,并不是子类必须要具备的功能,将其定义在接口里面,想要拓展的时候,
就去实现这个接口.所以增强了程序的扩展性.
作者: 肚小糖    时间: 2015-8-20 16:05
接口是interface,抽象类属于class
作者: 史柯    时间: 2015-8-20 16:44
举了例子吧。我写了一个动物类,这是抽象类,他有猫类狗类的具体类。我写了个接口,跳高接口。然后我写一个实现了跳高接口的猫类,这个猫会跳高了。抽象类是一种类型的东西,接口是让东西具备某种能力。
作者: Woo    时间: 2015-8-20 17:36
抽象类是类的抽象,接口是一种行为规范。所以说抽象类更多的是在于其属性,而接口更多的是在于其方法。
作者: taoaisheng    时间: 2015-8-20 18:59
两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。
作者: taoaisheng    时间: 2015-8-20 19:00
两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。




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