java - 继承,从子类调用方法

标签 java

我们今天在计算机科学讲座中讨论了继承,并讨论了从其他类访问方法。我的一位同学问子子类如何访问最高父类方法,我的教授也对此感到好奇,并提出了如下建议:

super.super.toString();

也许可以工作,但事实并非如此。出于好奇,我试图自己解决这个问题,并想出了这个:

public class A {
    public static void main(String[] args){
        B b = new B();
        C c = new C();

        System.out.println(b.toString());
        System.out.println(c.toString());
    }

    public String toString(){
        return "Class A";
    }
}

class B extends A {
    public String toString(){
        return "Class B";
    }
}

class C extends B {
    public String toString(){
        return A.class.toString();
    }
}

现在,在测试各种东西时,我偶然发现了这一点:(这一切都将在 C 类中完成)

super.toString();

似乎做同样的事情:

B.class.toString();

我的问题是两者之间有什么区别,还是完全相同?同样在我上面的代码中,这是从子子类调用方法的正确方法吗?

最佳答案

不,它们不是同一件事。假设您调用super.toString()来自你的类(class)C ,这会调用 toString()B ,这将返回“B 类”。

当您调用A.class.toString()时或B.class.toString()您根本没有调用任何父类(super class)方法,您正在调用 toStringClass .

关于java - 继承,从子类调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15165790/

相关文章:

Java 正则表达式 : Cannot match angular brackets

java - 隐藏打印对话框

java - Android项目 "error: package R does not exist "的Maven编译错误

java - 当前光标位置的操作无效 (Java DB)

Java 和 MySQL - 唯一 key 不起作用?

Java 格式将 double 转换为字符串

java - 在没有 Spring 的情况下解决 JAX RS 中的数组序列化

java - 如何在 REST 响应后删除文件

java - 使用 Java 将文件复制到具有相同文件名的文件夹中

java - Java 中的通用 vector