我尝试使用this
和super
以下代码段。在Java中使用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()
内的输出到控制台的语句。
Inside super
Inside super
Inside sub
Inside super
sub
super
10
10
15
因此,看来有this
和super
之间没有差别,当它们被用于未在它的子类(ES)重写访问方法和在变量情况下,当它们没有在阴影其子类(es)。
他们都倾向于指向超类成员。然而,如果不是这种情况,则会有明显的区别。
它们是否相同,当方法没有被覆盖或者变量没有被映射到相应的子类中?
这听起来像你已经回答了你的问题,但是有。 – supersam654 2013-04-21 01:17:34
是的,但我认为这是危险的假设。你最终可能会覆盖子类中的方法,然后超级,这不会给出相同的结果。 – Matt 2013-04-21 01:20:12
“在其子类中未被覆盖的方法”一个类不应该知道其子类的任何内容。你不能确定该行的一些子类不会覆盖该方法,除非它是“final”。 – newacct 2013-04-21 20:18:51