String可以被继承吗?那可以被重载吗?重写呢?
1 个回答
我依旧待人真诚,但不寄予厚望。姜尚## 1. **能否继承(extends)** **不能** * `String` 是 `final` 类(`public final class String`),`final` 修饰的类不能被继承。 * 设计原因: 1. 确保不可变性(Immutable)不会被破坏; 2. 保障哈希值缓存逻辑(`hashCode` 缓存)稳定; 3. 防止安全漏洞(`String` 在类加载、反射、ClassLoader 等安全相关模块广泛使用)。 ## 2. **能否重载(Overload)** **可以** * 重载是**同一个类**里,方法名相同、参数列表不同(参数类型/数量不同)的多个方法。 * 你可以在自己的类里写多个 `method(String s)`、`method(String s, int n)` 这样的重载; * 但是 `String` 类本身是你不能改的(它是 JDK 类),只能在自己类里写和 `String` 有关的方法重载。 示例: ```java public class Test { void print(String s) { } void print(String s, int times) { } } ``` ## 3. **能否重写(Override)** 分两种情况: 1. **不能重写 `String` 的方法** * 因为你不能继承 `String`,所以没法 Override 它的方法。 2. **可以重写参数是 `String` 的方法**(这不是重写 String 的方法,而是重写你自己父类里定义的某个方法) * 例如父类有 `void process(String s)`,子类可以重写它。 示例: ```java class Parent { void process(String s) { System.out.println("Parent: " + s); } } class Child extends Parent { @Override void process(String s) { System.out.println("Child: " + s); } } ``` ### 总结表 | 操作 | String 是否允许 | 原因/说明 | | -- | ----------------- | -------------------------------- | | 继承 | ❌ | `final` 类不可继承 | | 重载 | ✅ | 在自己类里定义同名不同参方法即可 | | 重写 | ❌(对 String 自身方法) | 不能继承就不能重写它的方法 | | 重写 | ✅(父类方法参数是 String) | 只是方法参数用 String,并不是重写 String 类的方法 |发布于 2025-08-12 20:26 •IP属地 四川举报评论收藏
公众号进入网站体验更佳

