为什么super在这里引用与引用变量sc1引用的相同地址?

时间:2015-10-24 04:33:35

标签: java class object reference super

不是超级假设要引用此处未创建的Object类类型的对象吗?

   public class SuperChk
    {
        void test()
        {
            System.out.println(super.toString());
        }
        public static void main(String[] args)
        {
            SuperChk sc1 = new SuperChk();
            System.out.println(sc1);
            sc1.test();
        }
    }

2 个答案:

答案 0 :(得分:3)

  

是不是超级假设引用这里没有创建的Object类类型的对象?

呃...不。

super关键字(当以这种方式使用时)表示“想要引用this,但被视为其超类的实例”。这是子类调用超类中可能已被覆盖的方法的方式。

java.lang.Object类是所有引用类型的最终超类,您的SuperChk类也不例外。您的SuperChk班级有toString()方法(继承自Object)且super.toString()正在调用它。

现在在您的示例中,super.是多余的,因为SuperChk不会覆盖String。但这里有一个不冗余的例子......

public class SuperChk {
    private void test() {
        System.out.println(toString());
        System.out.println(super.toString());
    }

    @Override
    public String toString() {
        return "Hello world";
    }

    public static void main(String[] args) {
        SuperChk sc1 = new SuperChk();
        sc1.test();
    }
}

如果你编译并运行它,你会发现toString()super.toString()正在调用不同的方法。

答案 1 :(得分:0)

每个Java类都从toString隐式继承。因此,您调用由Object定义并由您的类继承的方法{{1}}。