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



是不是超级假设引用对象的对象类类型,这不是在这里创建的?

   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();
        }
    }

是不是超级应该引用对象类类型的对象,而不是在这里创建的?

呃……没有。

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()调用不同的方法

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

最新更新