"摘要" keyword是指您无法创建类的实例(对象)。
Java.Lang.Math前面有以下关键字
public final class Math {
...
}
但没有"抽象"关键词。该类只提供了一组相关的静态变量和方法,如PI和sin()。
静态意味着这些变量/方法在对象的不同实例之间不可能是唯一的(这些变量/方法只有一个副本与类本身相关联)。那么为什么甚至允许程序员创建一个类的实例呢?为什么不在" abstract"?
之前答案 0 :(得分:14)
final
和abstract
个关键字无法一起应用,因为final
类无法覆盖,abstract
类可用于覆盖。< / p>
声明为
final
的类不能是用于创建immutable
类的subclassed
,如String
在JSL section - 8.1.1. Class Modifiers
下进行了更好的解释 abstract
类是一个不完整或被认为不完整的类。
如果一个类的定义完整且不需要或不需要子类,则可以声明该类final
。
上述两个陈述都自相矛盾。
如果您想了解更多信息,请查看A Strategy for Defining Immutable Objects上的 Java Tutroial
the class as final
。更复杂的方法是制作the constructor private
并在factory methods
中构建实例。答案 1 :(得分:12)
java.lang.Math
是一个Utility类(仅包含静态实用程序方法)。
定义实用程序类的正确方法是使其成为 final ,这样任何其他类都不能扩展它并拥有 private no-args构造函数,这样任何人都无法创建一个类的实例。
所以你将无法创建类的实例。但是,如果您使用抽象方法,则无法使用最终,并且无法阻止其被扩展。因此,前一种方法更好。
答案 2 :(得分:9)
如果它是抽象的,有人可以做
public class NewMath extends Math {
坦率地讲是没有道理的。
但是,无论如何都无法创建新的Math实例,因为它的唯一构造函数是私有的:
private Math() {}
答案 3 :(得分:2)
final
表示你无法扩展它,你无法创建实例的原因是因为构造函数是私有的。这是(在java中)定义静态类或工厂类的方法。
答案 4 :(得分:0)
Abstract关键字表示该类不能是Instantiable,但可以是Extended。 对于实用类这样的数学类,扩展它没有任何意义。声明no-args构造函数使其成为非可实例化的,并且最终使其成为非可扩展的......所以它是完美匹配....如果你使用Abstract,那么你就不能使用Final ......