You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何通过super方法输出所有继承的方法打印值?

如何让Java继承体系中依次触发所有父类的show方法输出?

首先,先修正你代码里的一个小语法错误:Child类内部重复写了package supertest;,这不符合Java语法规范,得先把这个问题改掉。

回到你的核心需求:现在你的代码里,GrandChild的test方法调用super.show()只会触发直接父类Child的show,再加上自己的输出,所以只有两行结果。要实现三个方法都输出,关键是要让每个子类的show方法主动调用父类的对应方法,形成链式调用。

先看修正语法错误后的原代码:

package supertest; 

public class Parent { 
    public void show (){ 
        System.out.println("I am father"); 
    } 
} 

public class Child extends Parent{ 
    public void show(){ 
        System.out.println("I am child"); 
    } 
} 

public class GrandChild extends Child{ 
    public void test(){ 
        super.show(); 
        System.out.println("I am grand child"); 
    } 
    public static void main(String[] args) { 
        GrandChild gr=new GrandChild(); 
        gr.test(); 
    } 
}

修改方案(推荐的面向对象写法)

我们只需要在Child的show方法里添加一行super.show();,让它先调用父类Parent的show,再执行自己的输出。这样当GrandChild调用super.show()时,就会触发整个继承链的方法执行:

package supertest; 

public class Parent { 
    public void show (){ 
        System.out.println("I am father"); 
    } 
} 

public class Child extends Parent{ 
    @Override
    public void show(){ 
        // 先调用父类的show方法,触发父类逻辑
        super.show();
        System.out.println("I am child"); 
    } 
} 

public class GrandChild extends Child{ 
    public void test(){ 
        super.show(); // 现在会先执行Parent的show,再执行Child的show
        System.out.println("I am grand child"); 
    } 
    public static void main(String[] args) { 
        GrandChild gr=new GrandChild(); 
        gr.test(); 
    } 
}

运行这段代码,输出就是你想要的结果:

I am father
I am child
I am grand child

原理说明

super关键字只能访问当前类的直接父类的成员,不会自动向上遍历所有父类。通过在每个子类的重写方法中调用super.show(),我们就构建了一个调用链:GrandChild.test() → Child.show() → Parent.show(),每个方法依次执行输出,最终实现三层结果的打印。

另一种不推荐的写法(仅作参考)

如果你不想修改Child类的代码,也可以在GrandChild里直接强制调用爷爷类Parent的show方法,但这种写法破坏了封装性,后续如果继承体系变化,代码很容易出问题,所以不建议使用:

public class GrandChild extends Child{ 
    public void test(){ 
        // 强制转换为Parent类型,绕过Child的show方法
        ((Parent) this).show();
        super.show(); 
        System.out.println("I am grand child"); 
    } 
    public static void main(String[] args) { 
        GrandChild gr=new GrandChild(); 
        gr.test(); 
    } 
}

内容的提问来源于stack exchange,提问作者Aliagha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:39:02