首页 > 解决方案 > 将 toString() 方法中的 super 关键字隐式转换为 super.toString() 没有发生

问题描述

我有以下两个类,如下所示。为简单起见,仅显示了 toString 覆盖的方法。

        public class Circle {
        @Override
            public String toString() {
                return "Circle";
            }
        }
        public class Cylinder extends Circle {
            @Override
            public String toString() {
     //     return "Cylinder"+this;  // runs without explicitly calling toString() on this keyword
     //     return "Cylinder"+super;  // throws error, asks to delete super token
            return "Cylinder["+super.toString(); // runs without error after adding .toString() with super keyword
            }

}

我遇到的问题是我对超级关键字的理解。super 关键字的 toString() 应该像 this 关键字一样被隐式调用。事实上,大多数教程和书籍都将 super 关键字称为对超类的一种对象引用,因此它的行为必须与此关键字与 toString() 中的“+”连接运算符一起使用时。请帮助我理解这一点。

标签: javainheritance

解决方案


Java 中的super关键字不是对象引用,与this不同。

this用作对调用对象的引用。

但是,没有可以存储在super 中的 reference-id是一个关键字,用于解析父 CLASS、它的方法和数据成员

所以,你不能打印super关键字的值。您只能使用super关键字访问父类的方法和成员。

这个

极好的

表达式


推荐阅读