我对java很新,所以我对上面的标题问题几乎没有什么困惑。
请有人帮我解决这个问题吗?
提前谢谢。
答案 0 :(得分:1)
考虑以下情况:
class Father {
Father() {}
}
class Son extends Father {
Son() {
super();
}
void foo() {
super(); //won't compile
}
}
您可以撰写Father f = new Father();
来构建Father
,但不能非法撰写super f = super()
。
否则会出现两个问题:
(1)什么是super
?编译器应该如何编译关键字super
?如果进一步扩展Son,则编译器可能无法确定实际的类super()
返回。
(2)关键字this
不明确。你的意思是this = super()
(类似于在构造函数中使用,但在这种情况下会很奇怪),或者你想创建一个超类的实例?
如果你真的想动态获取一个实例,你可以做的最多就是使用反射:
try {
Object o = this.getClass().getSuperclass().newInstance();
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
}
但这似乎很危险。最后,您应该使用Father f = new Father()
创建Father
实例,或使用关键字this
来引用Son
实例(继承Father
中的所有方法和字段1}})直接。
答案 1 :(得分:0)
在Java中,每个关键字都有自己的含义......例如,为了定义一个新类,我们使用'class'关键字。每个关键字都保留用于执行特定操作。基本上,当您键入关键字时,它是对jvm的指令,jvm知道在遇到特定关键字时需要执行的操作。同样,super()被设计为仅在子类构造函数中调用,这样当您实例化子类的对象时,超类默认值也将被实例化。因此,它确保在实例化子类实例时,超类默认值也将被实例化。现在,如果要在方法中创建超类Object,可以使用new keyword。