我对何时使用Abstract类或接口

时间:2017-09-12 05:13:44

标签: java oop interface abstract-class

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

我的例子与人类有关。人类可以是男人或女人。人类在生活中可以有不同的职业。这就是我如何使用它们:

我会将这些职业宣布为界面,因为它将建立一个人类在该职业中可以做什么的合同。例如:

Interface SoftwareEngineer{
 code();
}

Interface TruckDriver{
 driveTruck();
}

Interface Pilot{
 flyPlane(); 
}

我会宣称男人和女人是抽象的阶级 - 因为男人和女人都会成为那个人。

Abstract Man{

}

Abstract Woman{

}

用于定义一个人的类可以实现专业界面来定义该人可以做什么,并且该人将扩展抽象类来定义他/她是谁。

Class Mark extends Man, Implements SoftwareEngineer{

  code(){

  }
}

我将如何解释一些关于界面和抽象差异的理解。但我想知道如何回答以下两个问题:

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

  2. 你为什么要把男人和女人抽象化,为什么你不能把它们当成一个界面。类将实现它们而不是扩展。

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

3 个答案:

答案 0 :(得分:1)

界面是与外界的合约,是您最好的面子。在某种程度上,它还允许您在Java中实现多重继承。

抽象类提供了一组可以由其所有子类共享的通用功能,例如属性,字段等。

现在,让我们回顾一下您在帖子中提供的示例。

  1. 男人女人 如果一个男人或女人的实例可以在没有职业的情况下存在,则不需要成为抽象类 。因此,它们可以是具体的类。
  2. 您也不希望 Man Woman 成为一个界面。这将避免类实现 Man Woman 接口。
  3. 通过抽象类, Man Woman 类可以提供一组通用的功能。
  4. 名为 Mark 的类不适合扩展 Man 并实现 SoftwareEngineer 的具体类。可能是 ManSoftwareEngineer 是一个更好的名字(我知道它是主观的)。但是, Mark ManSoftwareEngineer
  5. 实例的好名称

答案 1 :(得分:1)

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

  

类定义了什么,接口定义了什么可以做什么

记住这个概念,男人和女人定义了人的一切。而职业只是一个人的特征,对性别持中立态度。这就是将其作为界面的原因。

现在回答你的问题:

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

如果你要创造一个新人,这些抽象的课程将会有所帮助,Sam说。山姆会有不同的行为。因此,通过一个抽象的课程“人类”来实现这一目标。您可以向Sam添加更多详细信息,同时保留“男人”所需的基本最低详细信息。事实上,根据Abstract类的定义,您可能会为其某些(Man)函数实现默认功能,您可以为派生类(Sam)覆盖这些功能。注意,接口根本不具备任何功能,它们定义的只是结构。我建议你把人类想象成一个抽象的阶级。

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

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

总结一下,只要您的意图主要涵盖派生类的所有方面,就可以定义一个Abstract类。以及可能由许多不同类型共享的特征的接口。例如,可以读取所有那些对象的IRead接口。现在阅读不仅适用于男性或女性,它也可以扩展到小工具。

答案 2 :(得分:0)

此案例通常属于Startegy设计模式。 (建议有抽象子类Man / Woman的共同抽象基类)。切勿使用任何具体的基类。

在您的示例中,SoftwareEngineer(类的名称不能是 Mark 因为它可以是该类的对象)在运行时永远不会成为教授。实际上马克可以成为,对吧?

一次假设一个职业的战略模式(同时我们需要修改模式Impl 的)将使用Human类(M / W)作为上下文,教授/ SoftwareEngineer为具体的战略。问题并没有在这里结束,它会因不同的职业而对不同的收入产生新的挑战,因为它会要求国家改变。但是使用策略作为基本模式可以解决问题。