gpt4 book ai didi

java - 我对何时使用抽象类或接口(interface)的理解

转载 作者:行者123 更新时间:2023-12-02 02:37:04 26 4
gpt4 key购买 nike

我希望验证我对何时/为何使用抽象或接口(interface)的理解。

我的例子与人类有关。人类可以是男人或女人。一个人一生可以从事不同的职业。这就是我使用它们的方式:

我将宣布这些职业为 Interface,因为它将建立一个人类在该职业中可以做什么的契约。示例:

Interface SoftwareEngineer{
code();
}

Interface TruckDriver{
driveTruck();
}

Interface Pilot{
flyPlane();
}

我将声明 Man 和 Woman 为抽象类 - 因为男人和女人会决定这个人是谁。

Abstract Man{

}

Abstract Woman{

}

用来定义一个人的类可以实现职业接口(interface)来定义这个人可以做什么,并且这个人将扩展抽象类来定义他/她是谁。

Class Mark extends Man, Implements SoftwareEngineer{

code(){

}
}

这就是我根据我的理解解释一些​​关于接口(interface)和抽象差异的方式。但我想知道如何回答以下两个问题:

  1. 你不能实例化一个抽象类,那么如果你把男人和女人当作抽象类,那么你如何实例化这些类。那它还有什么用呢?

  2. 为什么你要让 Man 和 Woman 变得抽象,为什么你不能把它们作为一个界面。类将实现它们而不是扩展。

这些是我问自己的问题。我可能在这里遗漏了一些东西。欣赏这个例子中的见解。

最佳答案

我想引用此链接的评论:What's the difference between an abstract class and an interface?

classes define what something is, interfaces define what something can do

牢记这个概念,男人和女人定义了人的全部内容。而职业只是一个人的特征,对性别而言是中立的。这就是将其作为界面的原因。

现在回答你的问题:

<强>1。你不能实例化一个抽象类,那么如果你把男人和女人当作抽象类,那么你如何实例化这些类。那它还有什么用呢?

Sam 说,如果您要创建一个新的 Man,这些抽象类将会很有帮助。山姆将会有不同的行为。因此,通过抽象类“Man”,您可以向 Sam 添加更多详细信息,同时保留“Man”所需的基本最低详细信息。事实上,根据抽象类的定义,您可能会为其某些(Man)函数实现默认功能,当然您可以为派生类(Sam)重写该功能。注意,接口(interface)根本不能有任何功能,它们定义的只是结构。我建议您将 Human 视为一个抽象类。

<强>2。为什么你让男人和女人变得抽象,为什么你不能把它们作为一个界面。类将实现它们而不是扩展?

仅仅因为男人或女人不仅仅是一个特征,而且它将定义派生类中的大部分组合。其次,由于接口(interface)特别关注一个特性,因此语言允许从接口(interface)进行多重继承。而一个人不可能同时是男人和女人。

总而言之,只要您的意图是主要覆盖派生类的所有方面,您就定义一个抽象类。以及仅用于可能由许多不同类型共享的特征的接口(interface)。例如,所有可以读取的对象的 IRead 接口(interface)。现在阅读不仅适用于男人或女人,它也可以扩展到小工具。

关于java - 我对何时使用抽象类或接口(interface)的理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46168387/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com