我有以下代码片段尝试使用this
和super
.
class SuperClass
{
public final int x=10;
public final String s="super";
public String notOverridden()
{
return "Inside super";
}
public String overrriden()
{
return "Inside super";
}
}
final class SubClass extends SuperClass
{
private final int y=15;
private final String s="sub"; //Shadowed member.
@Override
public String overrriden()
{
return "Inside sub";
}
public void test()
{
System.out.println(super.notOverridden());
System.out.println(this.notOverridden());
System.out.println(this.overrriden());
System.out.println(super.overrriden());
System.out.println(this.s);
System.out.println(super.s);
System.out.println(this.x);
System.out.println(super.x);
System.out.println(this.y);
}
}
public final class Test
{
public static void main(String[] args)
{
SubClass subClass=new SubClass();
subClass.test();
}
}
test()
在这个最简单的 Java 代码中,将输出重定向到类中方法内的控制台的语句SubClass
显示以下输出。
Inside super
Inside super
Inside sub
Inside super
sub
super
10
10
15
this
因此,看起来和之间没有区别super
,当它们用于访问在其子类中未覆盖的方法时,以及在变量的情况下,当它们在其子类中未隐藏时。
他们都倾向于指向超类成员。但是,如果不是这种情况,则存在明显的差异。
当方法没有被覆盖或者变量没有在各自的子类中被隐藏时,它们是否相同?