抽象类与具体类有何不同?

2022-09-01 18:05:17

我理解为什么我们需要Java中的抽象类 - 创建子类。但同样可以通过具体类来实现,例如,类子扩展父级。在这里,父母可以很好地抽象和具体。那么为什么我们有抽象呢?


答案 1

抽象类不能直接实例化。将类声明为抽象意味着您不希望它被实例化,并且该类只能被继承。您正在代码中强加规则。

如果您进一步扩展父/子关系示例以包含 Person 类,那么 Person 抽象是很有意义的。父母是一个具体的想法,孩子也是。人是现实和代码中的抽象概念。

一个好处是,您可以显式定义和保护抽象类的思想。当您将类声明为抽象时,您或使用代码的其他任何人都无法通过实例化它来错误地使用它。此推理类似于我们将函数和字段指定为公共、私有或受保护的原因。如果将函数或成员声明为私有,则实际上是在保护它免受客户端代码的不当访问。私有意味着在类中使用,仅此而已。抽象类是要继承的,仅此而已。

现在,您是否必须使用抽象类并将函数和字段定义为私有而不是公共?不,您不需要。但是,提供这些概念是为了帮助保持代码整洁和组织良好。据我所知,抽象类是用所有面向对象的语言实现的。如果你环顾四周,你会发现C++,C#,VB.NET 等都使用这个概念。

一个更好的具体例子:

Shape hierarchy UML Diagram

在上面的示例中,Shape 类应该是抽象的,因为它本身没有用处。


答案 2

抽象类意味着它是抽象的不完整的。它需要另一个类来完成它和/或其功能。您需要扩展抽象类。它将对某些类有用,例如。水果所有水果都具有相同的性质,如颜色。但是你可以对不同的水果有不同的特性,比如它是果肉,如橙色或不是香蕉等。