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
相关产品推荐
相关产品推荐

