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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© asky_yu 中级黑马   /  2015-8-19 17:11  /  497 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

主要怎么区分?

13 个回复

倒序浏览
接口中只能定义抽象方法,不能有构造方法,不能有成员变量
抽象类中可以有构造方法,可以有成员变量,可以有非抽象方法,但至少要有一个抽象方法

抽象类要想使用,必须被继承,接口要想使用,必须要被子类实现
类与类之间是继承关系,接口与接口之间也是继承关系
一个类在继承某个类的同时,还可以实现多个几口
回复 使用道具 举报
最直接的:抽象类中可能有抽象方法,也可以有非抽象的方法。而接口类中必须所有的方法都是抽象的。
回复 使用道具 举报
接口可以理解为是抽象类中的一种特殊抽象类,接口中全是抽象方法
抽象类中可以有抽象方法,也可以没有抽象方法,也可以有构造和普通方法,但是接口里只能有抽象方法
回复 使用道具 举报
接口中没有构造方法,接口中的变量是最终变量,也就是常量,接口中只有抽象方法,抽象类中可以有抽象方法,也可以有非抽象方法
回复 使用道具 举报
简单来说,
接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,

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

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

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

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