为什么抽象方法是抽象的?
Why are abstract methods abstract?
抽象的东西意味着隐藏数据。我不明白抽象方法如何向用户隐藏任何数据。可以提出一个论点,即抽象方法不需要实现,而是在 class 层次结构的宏伟计划中,不会向用户隐藏任何内容。抽象方法似乎只是强制实现所以我不明白为什么它们是抽象的。
For something to be abstract means to hide data.
我认为你的困惑来自这个(错误的)前提。
抽象最好理解为没有实现。它与 concrete 相反(即有实现)。
请参阅来自维基百科的 abstract type 文章:
In programming languages, an abstract type is a type in a nominative type system that cannot be instantiated directly; a type that is not abstract – which can be instantiated – is called a concrete type.
我认为当你使用抽象的实际定义时,Java 抽象方法的命名更有意义:
existing in thought or as an idea but not having a physical or concrete existence
这是有道理的,因为 Java 抽象方法是没有实现的方法定义。
虽然抽象classes和方法可以用于数据隐藏,但是“抽象”并不意味着“隐藏数据”。 Java language specification 定义抽象 classes 和方法如下:
An abstract class is a class that is incomplete, or to be considered incomplete.
An abstract method declaration introduces the method as a member, [...], but does not provide an implementation (§8.4.7). A method that is not abstract may be referred to as a concrete method.
Abstract classes 可用于数据隐藏。例如,java.awt.Toolkit 是一个抽象的 class,但它的具体实现是私有的。要使用 Toolkit,您需要使用静态工厂方法 getDefaultToolkit
获取实例,其中 returns 是具体 class 的实例,但您不知道是哪一个。通过提供 public 抽象工具包 class,您可以使用 class 提供的服务,但“数据”(具体实现)对您是隐藏的。
术语抽象 表示某些东西不是有形的,而是更多的概念。而实现是可以使用的实际事物。用具体这个词来形容后者。
摘要 classes 是 classes 具有零个或多个实现的 mixture 和零或更多未实现的方法,用于构建具有更多或专门功能的其他 classes。所以任何 class 子 class 是一个摘要 class 可能有:
- 从抽象 class 继承的一组核心实现方法,不一定会因实现而异。
- 抽象class指定的一组方法签名(未实现的方法)必须在子classes中实现,并且其实现可能因子实现而异class 要求。
- 子class 的作者认为在摘要class 中未指定的任何其他附加方法是必需的。
以上1、2组成摘要class.
在上述 (1) 的情况下,如果 subclass 的作者认为有必要,可以覆盖这些方法(除非这些方法被声明为 final).
最后,Abstract classes 可以继承class 其他采用上述相同理念的Abstract classes。
抽象的东西意味着隐藏数据。我不明白抽象方法如何向用户隐藏任何数据。可以提出一个论点,即抽象方法不需要实现,而是在 class 层次结构的宏伟计划中,不会向用户隐藏任何内容。抽象方法似乎只是强制实现所以我不明白为什么它们是抽象的。
For something to be abstract means to hide data.
我认为你的困惑来自这个(错误的)前提。
抽象最好理解为没有实现。它与 concrete 相反(即有实现)。
请参阅来自维基百科的 abstract type 文章:
In programming languages, an abstract type is a type in a nominative type system that cannot be instantiated directly; a type that is not abstract – which can be instantiated – is called a concrete type.
我认为当你使用抽象的实际定义时,Java 抽象方法的命名更有意义:
existing in thought or as an idea but not having a physical or concrete existence
这是有道理的,因为 Java 抽象方法是没有实现的方法定义。
虽然抽象classes和方法可以用于数据隐藏,但是“抽象”并不意味着“隐藏数据”。 Java language specification 定义抽象 classes 和方法如下:
An abstract class is a class that is incomplete, or to be considered incomplete.
An abstract method declaration introduces the method as a member, [...], but does not provide an implementation (§8.4.7). A method that is not abstract may be referred to as a concrete method.
Abstract classes 可用于数据隐藏。例如,java.awt.Toolkit 是一个抽象的 class,但它的具体实现是私有的。要使用 Toolkit,您需要使用静态工厂方法 getDefaultToolkit
获取实例,其中 returns 是具体 class 的实例,但您不知道是哪一个。通过提供 public 抽象工具包 class,您可以使用 class 提供的服务,但“数据”(具体实现)对您是隐藏的。
术语抽象 表示某些东西不是有形的,而是更多的概念。而实现是可以使用的实际事物。用具体这个词来形容后者。
摘要 classes 是 classes 具有零个或多个实现的 mixture 和零或更多未实现的方法,用于构建具有更多或专门功能的其他 classes。所以任何 class 子 class 是一个摘要 class 可能有:
- 从抽象 class 继承的一组核心实现方法,不一定会因实现而异。
- 抽象class指定的一组方法签名(未实现的方法)必须在子classes中实现,并且其实现可能因子实现而异class 要求。
- 子class 的作者认为在摘要class 中未指定的任何其他附加方法是必需的。
以上1、2组成摘要class.
在上述 (1) 的情况下,如果 subclass 的作者认为有必要,可以覆盖这些方法(除非这些方法被声明为 final).
最后,Abstract classes 可以继承class 其他采用上述相同理念的Abstract classes。