抽象类具有具体和抽象功能。 接口只有抽象函数。
两者都可以覆盖。是吗
一个人的实时优势是什么?
答案 0 :(得分:38)
接口适用于您想说“我不关心您是如何做到的,但这就是您需要完成的工作。”
抽象类适用于你想说“我知道你应该做什么,我知道你应该如何在一些/很多情况下这样做。”
抽象类有一些严重的缺点。例如:
class House {
}
class Boat {
}
class HouseBoat extends /* Uh oh!! */ {
// don't get me started on Farmer's Insurance "Autoboathome" which is also a helicopter
}
您可以通过界面了解:
interface Liveable {
}
interface Floatable {
}
class HouseBoat implements Liveable, Floatable {
}
现在,抽象类也非常有用。例如,考虑AbstractCollection类。它定义了所有集合的常用方法的默认行为,例如isEmpty()
和contains(Object)
。如果您愿意,可以覆盖这些行为,但是...是确定集合是否为空的行为确实可能会更改?通常它会是size == 0
。
由于它不会经常改变,开发人员是否真的值得每一个......单个......时间......为“解决”类别中的每个方法实现该方法?更何况当您需要对其进行更改时,如果您不得不在任何地方重新实现它,那么您将会遇到代码重复和错过的错误。
答案 1 :(得分:16)
接口很有用,因为Java没有多重继承(但你可以实现任意数量的接口)。
当您需要基类的具体行为时,抽象类很有用。
答案 2 :(得分:2)
事实是 -
这些事实可用于倾斜优势,有利于接口或抽象类。
如果一个类必须与其他类共享多个行为,则接口获胜。 如果必须与其他类共享/覆盖方法定义,则抽象类获胜。
答案 3 :(得分:1)
类可能实现多个接口,而它可能只扩展一个类(抽象或具体),因为Java不支持多重继承。
答案 4 :(得分:1)
在OOP中(大多数独立于具体语言)抽象类是行为和结构的类层次结构的重用机制,它本身并不完整。 接口是独立于具体实现而在模块(例如类)上指定要求的机制。 所有其他差异都是技术细节,重要的是不同的用法。
答案 5 :(得分:0)
你不要覆盖界面。你实现它。
编写接口使实现者能够实现接口以及除继承基类之外的其他接口。
可以部分或完全实现抽象类。标记类抽象只会阻止您实例化该类型的对象。
答案 6 :(得分:0)
-Method没有任何实现是抽象方法,每当一个类包含一个或多个抽象方法时,它必须被声明为抽象类
-Interface是完全抽象的,不能有构造函数,实例和静态块,它只包含两种类型的成员 公共抽象方法 2.public-static-final变量
*两者都无法实例化,但可以创建引用。
*哪一个更适合取决于应用程序 -Interfaces非常有用,因为Java类不支持多重继承,但接口不支持。
- 当您需要基类的具体行为时,抽象类很有用。
答案 7 :(得分:0)
界面优于抽象类的主要优点是克服钻石的发生 问题并实现多重继承。 在java中,没有为使用类的钻石问题提供解决方案。因此,多重继承是使用java中的类的块。 因此,要实现多重继承,我们使用interface。
答案 8 :(得分:0)
class Animal
{ void move(){} }
class Bird
{ void move(){fly} }
class Fish
{ void move(){swim} }
现在,如果类Animal是抽象类,如
Animal a;
a= new Bird(); or a = new Fish()
在这里,抽象效果很好,但如果有100个对象,如Animal a[100]
;
你不能写new Bird().move
或new Fish().move
100次
使用界面并编写a[i].move
。它将区分为鸟或鱼,并且move()
将被调用
其次它支持多重继承,因为类A
可以实现尽可能多的接口。
答案 9 :(得分:0)
惊人的答案!!
我也想对界面发表我的看法。
顾名思义,它是接口,意思是它将提供两个类之间的接口。
它帮助一个类或接口同时拥有多个行为。
拥有接口的人可以访问与接口一致的类的行为。
interface teacher
{
//methods related to teacher
}
interface student
{
//methods related to student
}
interface employee
{
//methods related to employee
}
class Person:teacher,student,employee
{
//definition of all the methods in teacher,student, employee interface
//and method for person
}
现在有 teacher
接口的类将只能访问 Person 的 teacher
行为。
同样,具有 student
接口的类或模块将只能访问人的 student
行为。
使用抽象类,根本不可能。
希望这会增加一些额外的点。 :)
快乐编码!!!。