理解類聲明規則是掌握 Java 封裝與繼承機制的基石。本文系統梳理非訪問修飾符、訪問權限修飾符、抽象類與 final 類的互斥關係,並通過跨包繼承案例揭示默認包私有可見性的陷阱。
| 修飾符 | 作用 | 關鍵規則 |
|---|---|---|
abstract | 聲明抽象類 | 不可實例化;含抽象方法必須為 abstract;可無抽象方法 |
final | 禁止繼承 | 行為不可變,類似數學常量;不可與 abstract 共存 |
strictfp | 強制浮點運算遵循 IEEE 754 | 確保跨平台浮點計算結果一致 |
核心結論:抽象類旨在被繼承,final 類拒絕繼承,二者語義衝突,編譯器禁止同時使用。
類級別僅支持 public 和 包私有(默認,無修飾符)。內部類可用 private/protected。
public:任意類可訪問(需導入)new ClassName()class Sub extends Super// 源文件一:cert 包
package cert;
class Test1 {} // 默認包私有
// 源文件二:cert2 包
package cert2;
import cert.Test1; // 編譯錯誤:Test1 不可見
public class Test2 extends Test1 {}
原因:Test1 為包私有,Test2 在不同包中通過 extends 訪問屬於「繼承訪問」,不被允許。解決:將 Test1 改為 public 或置於同一包。
publicpublicfinal 防止被繼承濫用