子类能从父类继承哪些成员?
查看完整题解
参考回答
直接回答
子类能按访问与继承规则获得父类的 public、protected 成员,同包情况下还可能获得包访问成员;private 成员不作为子类的继承成员。构造器不会被继承。是否能在某个位置使用成员,还需要结合访问权限、包、模块以及具体表达式判断。
讲清原理
父类私有字段仍可作为子类对象中父类状态的一部分存在,并由父类方法操作。“不继承 private 成员”不等于对象里没有父类的私有状态。
继承的实例方法可能被重写,静态方法和字段可能被隐藏,final 方法则不能被重写。跨包 protected 的访问也有额外限制,不能解释成“任何拿到父类对象的子类代码都能任意访问”。
例子与易错点
class Parent {
private int secret = 6;
protected int readSecret() { return secret; }
}
class Child extends Parent {
int read() { return readSecret(); }
}
System.out.println(new Child().read()); // 6
子类通过合法继承的方法取得结果,不是直接把 secret 变成自己的可访问字段。静态字段若来自父类,也不会因为创建多个子类对象就自动复制多份;构造器和初始化过程应与成员继承分开讨论。
相关题:第 4 题、第 29 题、第 34 题、第 36 题。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。