被final修饰的类和static的区别是什么?
1 个回答
不妨大胆一点,很多事情都没有答案。郭维`final` 修饰类 和 `static` 是两种完全不同的概念,一个是**继承限制**,一个是**类成员修饰**(有时也能修饰内部类),本质和用途不一样。 ## 1. **final 修饰类** **作用**: * 防止类被继承。 * 所有方法自动不可重写(因为类本身不能被继承)。 * 常用于不可变类(如 `String`、`Integer`、`Math`)。 **示例**: ```java public final class MyClass { public void show() {} } class SubClass extends MyClass {} // ❌ 编译错误 ``` ## 2. **static** `static` 不能直接修饰**顶层类**(Java 语法不允许),但能修饰: * **类的成员变量/方法**(静态变量/静态方法) * **内部类**(静态内部类) **含义**: * 静态成员属于**类本身**,不属于某个实例,所有实例共享同一个静态变量/方法。 * 静态内部类**不依赖外部类实例**就能创建。 **示例**: ```java public class Outer { static int count = 0; // 静态变量 static void staticMethod() { // 静态方法 System.out.println("static method"); } static class Inner { // 静态内部类 void show() { System.out.println("static inner class"); } } } ``` ## 3. **主要区别对比** | 对比项 | `final` 修饰类 | `static` | | ---- | ----------- | -------------------- | | 含义 | 类不能被继承 | 修饰成员/内部类,表示属于类本身 | | 作用范围 | 顶层类、内部类 | 成员变量、方法、内部类 | | 继承性 | 阻止继承 | 不影响继承 | | 实例化 | 可以实例化对象 | 不影响实例化(静态内部类可直接 new) | | 常见用途 | 不可变类、安全类设计 | 工具方法、全局常量、工具类、嵌套类 | ## 4. **联系** * `final` 修饰类是继承方面的限制,`static` 关注的是**类级别的成员/内部类共享**。 * 两者可以同时作用在**静态内部类**上,比如: ```java public class Outer { public static final class Inner { // 这个内部类既是静态的,也不能被继承 } } ```发布于 2025-08-08 17:11 •IP属地 广东举报评论收藏
公众号进入网站体验更佳

