gpt4 book ai didi

java - 为什么 Java.Lang.Math 不是抽象的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:26:52 37 4
gpt4 key购买 nike

“抽象”关键字意味着您不能创建类(对象)的实例。

Java.Lang.Math 前面有以下关键字

public final class Math {
...
}

但没有“抽象”关键字。该类仅提供相关静态 变量和方法的集合,例如 PI 和 sin()。

静态意味着那些变量/方法在对象的不同实例之间不能是唯一的(与类本身相关联的那些变量/方法只有一个副本)。那么为什么还要允许程序员创建类的实例呢?为什么不在“摘要”之前?

最佳答案

finalabstract 关键字不能一起应用,因为 final 类不能被覆盖和 abstract 类用于覆盖。

A class that is declared final cannot be subclassed that is used for creating an immutable class such as String

JSL section - 8.1.1. Class Modifiers 下有更好的解释

  1. 抽象 类是不完整的或被认为是不完整的类。

  2. 如果类的定义是完整的并且不需要或不需要子类,则可以将类声明为final

以上两种说法自相矛盾


如果您想阅读更多有关内容的信息,请查看 A Strategy for Defining Immutable Objects 上的 Java Tutroial

  1. 不要提供“setter”方法——修改字段或字段引用的对象的方法。
  2. 将所有字段设为最终字段和私有(private)字段。
  3. 不允许子类覆盖方法。最简单的方法是将类声明为final。一种更复杂的方法是将构造函数设为私有(private),并在工厂方法中构造实例。
  4. 如果实例字段包含对可变对象的引用,则不允许更改这些对象:
    • 不要提供修改可变对象的方法。
    • 不要共享对可变对象的引用。

关于java - 为什么 Java.Lang.Math 不是抽象的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24896505/

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