static 是什么?private 和 static 方法能被重写吗?
先说出你的答案
定义边界、关键机制、一个反例;P8题再补容量、失败与验证。
查看完整题解
参考回答
直接回答
static 成员属于类,不依赖某个当前实例。静态方法不能被重写,子类声明相同签名的静态方法通常构成隐藏;父类 private 方法不被子类继承,因此也谈不上重写。子类可以声明同名方法,但必须区分它与父类方法是否存在覆盖关系。
讲清原理
重写依赖实例方法的动态分派:通过父类型变量调用时,可以执行实际对象的实现。静态方法根据编译期确定的类型选择,不参加这套机制。private 方法只在允许的访问范围内使用,子类的同名声明不能替换父类内部对它的调用。
@Override 会让编译器检查关系。把它加在隐藏静态方法或仅仅同名的 private 方法上,通常会暴露误解。也不能把父类静态方法改成同签名实例方法,或反过来混用。
例子与易错点
class Parent { static String who() { return "父类"; } }
class Child extends Parent { static String who() { return "子类"; } }
Parent value = new Child();
System.out.println(value.who()); // 父类
System.out.println(Child.who()); // 子类
示例中的实例写法合法,但容易误导,应写成 Parent.who()。static 也不表示线程安全,静态可变字段仍需要并发控制。
相关题:第 5 题、第 6 题、第 47 题。
和评分标准对照,你能独立回答到哪一步?
自评会安排下一次复习,不保存你的口述内容。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。