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

标签 java class object reference super

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

最佳答案

Isn't super suppose to refer object of Object class type which is not created here?

呃……不。

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

java.lang.Object 类是所有引用类型的最终父类(super class),您的 SuperChk 类也不异常(exception)。您的 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 - 为什么这里的 super 引用的地址与引用变量 sc1 引用的地址相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33314578/

相关文章:

java - 如何将变量传递给不同的方法

ios - 如何检查 NSArray 中的空对象

ruby - 在 Ruby 中验证 DateTime 对象

java - 仅当特殊字符不在单词内部时才从字符串中删除特殊字符

java - 添加自定义尺寸的 JTable

java - 将对象类型作为参数传递给方法?

python - 如何在 Python 中实现列表类的 undo() 方法

html - 在 CSS 中设置文本框样式的最佳方式

javascript - 在 Javascript 中反转对象数组

java - 配置 Spring Integration 聚合器以组合来自 RabbitMq 扇出交换的响应