と を使用しようとする次のコード スニペットが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();
}
}
この最も単純な Java コードでは、出力をtest()
クラス内のメソッド内のコンソールにリダイレクトするステートメントによってSubClass
、次の出力が表示されます。
Inside super
Inside super
Inside sub
Inside super
sub
super
10
10
15
したがって、サブクラスでオーバーライドされていないメソッドにアクセスするために使用される場合と、サブクラスでシャドウされていない変数の場合に、this
との間に違いはないようです。super
どちらもスーパークラスのメンバーを指す傾向があります。ただし、そうでない場合は、明らかな違いがあります。
メソッドがオーバーライドされていない場合、または変数がそれぞれのサブクラスでシャドウされていない場合、それらは同じですか?