大佬教程收集整理的这篇文章主要介绍了如果在继承过程中只创建了一个对象,那么 super 关键字引用的是什么?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在下面的代码中,super关键字引用了什么?
class A {
int i1 = 10;
A() {
System.out.println("class A");
}
}
class B extends A {
int i2 = super.i1;
B() {
System.out.println("class B");
}
}
class C extends B {
int i3 = super.i2;
public static voID main(String args[]) {
C c = new C();
System.out.println(c.i3);
}
}
如果没有创建超类的对象/实例,那么 super 关键字引用的是什么,因为它是一个引用变量并且应该引用超类实例?
int i2 = super.i1; and int i2 = i1; both are same
因为 i1 从父类 A 继承到子类 B 像智者
int i3 = super.i2; and int i3 = i2; both are same
Super 仅指父类。 当您创建类 C 的对象时,会创建一个对象 - C 的一个实例。
C 同时是 B 的实例和 A 的实例,同时也是 Object 由于 C 同时是 B 的实例和 A 的实例,这就是为什么在构造函数中添加了 cal super() 来调用父类的构造函数 C 的构造函数调用 B 的构造函数,而 B 的构造函数调用 A 的构造函数
,请注意,super
与 this
有点不同,因为 super
不是主要表达式。实际上,super
根本不是表达式。所以说 super
本身引用到任何东西是没有意义的。请注意,您不能这样做:
SomeType foo = super;
做什么有意义,这些(不是所有涉及 super
的详尽列表):
super(...);
形式的超类构造函数调用super.identifier
super.identifier(...)
形式的方法调用那些形式都指代不同的事物,但是super
这个词本身没有单一的含义,除非您对“与超类有关的东西”感到满意。
特别是在这个问题中,您询问的是现场访问。这在语言规范的 15.11.2 部分中有描述。
表单 super.Identifier
指的是当前对象名为 Identifier
的字段,但将当前对象视为当前类的超类的实例。
对于 i1
,由于 B
继承自 A
,即使您将当前对象视为 i1
,B
也会引用相同的字段,因此,您将当前对象视为什么类并不重要。无论是super.i1
,还是this.i1
,或者只是i1
,都没有区别。当您在 i1
中重新声明 B
时,差异更加明显:
class A {
int i1 = 10;
}
class B extends A {
int i1 = 20;
int i2 = super.i1;
}
i2
将获得值 10,而不是 20
,因为您将当前对象视为 A
。请注意,在这种情况下,B
的实例获得两个名为 i1
的字段,一个从 A
继承,另一个在 B
中声明。将对象“作为 A
”查看将让您看到从 A
继承的对象,否则它是隐藏的。
以上是大佬教程为你收集整理的如果在继承过程中只创建了一个对象,那么 super 关键字引用的是什么?全部内容,希望文章能够帮你解决如果在继承过程中只创建了一个对象,那么 super 关键字引用的是什么?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。