java - Java - 覆盖实例字段
问题描述
我现在无法自己测试,因为我的代码已损坏并且无法运行测试。
如果您final public
在超类中声明了一个实例字段S
。
class S {
public final String field = "field in super class";
}
class A extends S {
public final String field = "field in sub class A";
}
class B extends S {
public final String field = "field in sub class B";
}
正在做
System.out.println( new A().field );
这将打印:
field in sub class A
但是在任何代码中的任何地方给出一个方法:
public method(S instance) {
System.out.printlng( instance.field ); // Will compile just fine!
}
如果我打电话,这会打印什么method(new A())
?
解决方案
我运行了这段代码:
public class HelloWorld{
static class S {
public final String field = "field in super class";
}
static class A extends S {
public final String field = "field in sub class A";
}
static class B extends S {
public final String field = "field in sub class B";
}
public static void method(S instance) {
System.out.println( instance.field ); // Will compile just fine!
}
public void test(){
}
public static void main(String []args){
method(new A());
}
}
在 codingGround 上并返回“超类中的字段”。
推荐阅读
- java - 扩展 log4j/slf4j 记录器
- javascript - 用户在网站上传的 SVG 图像的路径
- php - 测试 mysqli 数据库连接是否在最多 5 秒内处于活动状态
- r - scale_x_discrete 和 x 轴定位
- python-3.x - 带有pyLDAvis的Visual Studio中的ipython
- python - 按除数查找开关
- c# - C# 异常处理 finally 块在 catch 块之前
- symfony - 如何访问 base.html.twig 中的 peekAll() 以检查消息/闪烁
- visual-studio-code - 在 VS Code 中选择所有活动的缩进键盘快捷键
- sql - Flattening mutliple Rows into a single row based on identifier