首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java-接口可以做哪些抽象类不能做的事情?

Java-接口可以做哪些抽象类不能做的事情?
EN

Stack Overflow用户
提问于 2014-12-18 19:31:40
回答 3查看 885关注 0票数 0

我知道“接口”和“抽象类”的区别。但是你能给我提供一个可以通过“接口”而不是通过“抽象类”来构建的示例吗?

EN

回答 3

Stack Overflow用户

发布于 2014-12-18 19:38:38

一个简单的例子是表示相同实体但具有不同行为的对象。以鸟类为例。有些鸟会飞,有些鸟不会飞,定义一个强制它的所有子类都实现fly方法的abstract class Bird是错误的。

因此,在这种情况下,可以将eat()sleep()等方法定义为abstract class Bird中的抽象方法,但不能定义为fly(),因为不是所有的鸟都能飞。

通常,您将定义一个名为instace Flyable的接口,该接口将包含fly()方法的定义,该方法必须由实现该接口的类覆盖。

最后,你会得到类似这样的结果:

代码语言:javascript
复制
public abstract class Bird{
  public abstract void eat();
  public abstract void sleep();
}

public interface Flyable{
  void fly();
}

public class Eagle extends Bird implements Flyable{ 
 .... has to implement eat(), sleep() and fly()
}

public class Ostrich extends Bird{
... has to implement only eat() and sleep() since ostrich can't fly
}
票数 1
EN

Stack Overflow用户

发布于 2014-12-18 19:33:32

100%的抽象化称为接口。

List是一个接口。它只是简单的方法定义。

抽象类:它有一些方法实现。

AbstractList是一个抽象类。它有方法实现。

票数 0
EN

Stack Overflow用户

发布于 2014-12-18 19:50:32

java.lang.Comparable中的可比较接口永远不能实现为类(即抽象类),这是因为compareTo方法完全依赖于实现它的类。并且要求对于所有对象比较,他们应该已经实现了这个方法(被比较的对象)

注意:可比较类用于比较两个对象是否相等

尽管StringBuilder和StringBuffer都扩展了AbstractStringBuilder,但它更适合作为抽象类来编写。这样,两个类中的公共功能(如charAt、expandCapacity、indexOf )都可以放在这种抽象的class..This方式中,代码可以重用,这在接口的情况下是不可能的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27545592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档