当前位置: 首页 > 知识库问答 >
问题:

什么可以由接口完成而不能由抽象类完成?

鲁博瀚
2023-03-14

我知道“接口”和“抽象类”的区别。但是你能给我提供一个可以通过“接口”而不是通过“抽象类”构建的例子吗,留下了“多重继承”的例子?

共有1个答案

董康平
2023-03-14

一个简单的例子是表示相同实体但具有不同bevaviour的对象。例如,考虑鸟类。有些鸟能飞,有些不能。定义一个抽象类bird是错误的,它强制它的所有子类实现一个fly方法。

因此,在这种情况下,可以将方法定义为eat()sleep()作为抽象类bird中的抽象方法,但不能定义为fly(),因为并非所有的鸟都能飞。

通常,您将定义一个调用instaceflyable接口,该接口将包含fly()方法的定义,该方法必须由实现该接口的类重写。

最后你会得到如下结果:

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
}
 类似资料:
  • 问题内容: 在Java中,您可以创建一个仅包含抽象方法的抽象类。另一方面,您可以创建一个声明相同方法的接口。在这种情况下,可以使用抽象类代替接口吗? 问题答案: 不总是: 一堂课只能延伸 一 堂课 一个类可以实现 多个 接口 Sun文档 进行了更详细的比较: 抽象类与接口 与接口不同,抽象类可以包含非静态和最终字段,并且可以包含已实现的方法。此类抽象类与接口相似,不同之处在于它们提供了部分实现,将

  • 问题内容: 我想知道何时应该使用接口。 让我们考虑以下内容: 和: 我可以轻松实现它们,它们具有相同的功能…但是我也可以向车辆类中添加一些变量,这些变量可能应该在车辆中使用(maxSpeed,carType …) 使用接口的原因是什么? 谢谢! 编辑: 我在另一个线程中找到了关于它的漂亮链接:http : //www.thecoldsun.com/en/content/01-2009/abstra

  • 问题内容: 我已经从Rich Faces 3.3升级到Rich Faces 4.2,因为Ajax不适用于IE9。现在它仍然不起作用。 收到响应后,IE会收到一个JS错误 “ SCRIPT58734:从源头上来的东西”:c00ce56e。 在尝试时 在jsf.js.html?ln = javax.faces&conversationContext = 2,第1行第21747行 我认为是因为HTTP标

  • 我最近读了一篇关于的文章。文中写道:“使用EnumMap带来实现特定的好处,这是针对枚举键实现的,简而言之,是专门针对枚举键优化的映射实现。” 它还写到:“枚举是使用数组实现的,常用的操作会产生恒定的时间。因此,如果您想要一个高性能的,可以是枚举数据的合适选择。”

  • 问题内容: 我最近参加了一次采访,他们问我一个问题:“为什么接口比抽象类更受青睐?” 我尝试给出一些答案,例如: 我们只能获得一种扩展功能 他们是100%抽象 实现不是硬编码的 他们要求我使用您使用的任何JDBC API。“它们为什么是接口?”。 我可以为此得到更好的答案吗? 问题答案: 该面试问题反映出提出该问题的人的某种信念。我相信这个人是错的,因此您可以选择两个方向之一。 给他们他们想要的答

  • 问题内容: 在Java 8中,只有一个抽象方法的抽象类不是功能接口(JSR 335 )。 这是一个功能接口: 但这不是: 因此,我不能将抽象类用作lambda表达式和方法引用的目标。 编译错误为:。 语言设计者为什么要施加此限制? 问题答案: 自Lambda项目成立以来,这一直是一个重要的话题,并且引起了很多思考。Java语言首席架构师Brian Goetz强烈支持将lambda视为 功能 而非