Java中的super是什么意思?
我在一篇论文中遇到了一个问题,并询问了 Java 中 super 是什么意思?有四种选择:
- A -
super表示当前实例的内存地址 - B -
super表示当前实例的超级实例的内存地址。 - C -
super表示当前实例的超类。 - D -
super可以在main()方法中使用。
我想答案应该是B,但答案是C,是答案错了还是我错了?
我的翻译可能不太准确,你可以自己翻译:
??极好的????????
一种????????????
乙?????????????????????
C??????????
D????main()???
回答
B - super 表示当前实例的超级实例的内存地址。
我想答案应该是B,但答案是C,是答案错了还是我错了?
你错了。 Marco 的回答(和评论)解释了为什么 C 是正确的。
B 答案不正确/荒谬,原因有二:
-
(普通)Java 程序无法访问内存地址。Java 使用引用,并且在 Java 1中根据引用(而不是地址)来指定事物。
-
没有实例的超级实例这样的东西。一个实例是其(最派生)类的两个实例,及其所有超的同时。所以“超级实例”的地址将与实例本身的地址相同。
我认为B可以解释。当前实例内部没有匿名超级实例吗?
那不正确。没有“内”。您的解释是基于对对象建模和Java 如何实现对象类型/类的错误理解。
可以这样想:(现实世界的)猫里面有匿名的哺乳动物吗?不。我的小猫“蓬松”是哺乳动物,同时也是猫。当我们将猫视为哺乳动物时,我们会故意忽略使其像猫一样的特征,而专注于(仅)哺乳动物的特征。
同样,在 Java 中:
public class Mammal {
...
}
public class Cat extends Mammal {
...
}
Mammal thing = new Cat();
// The 'thing' still refers to a 'Cat', but we can only see the
// 'Mammal' characteristics
Cat fluffy = (Cat) thing;
// But when we look at it via 'fluffy', we can see it's 'Cat'
// characteristics too.
System.out.println(fluffy == thing); // prints "true" because they
// refer to the same object.
1 - 此术语错误可能是英文 -> 中文或中文 -> 英文翻译问题的结果。