Java中同名方法调用的原理及PetPair类代码疑问
Java中同名方法调用的原理及PetPair类代码疑问
嘿,我太懂你刚看到这段代码时的懵圈感了!一开始我也差点看错,咱们慢慢把这个点捋明白~
你现在的核心误解是:你以为PetPair的writeOutput方法在调用自己,但实际上它是在调用成员变量first和second的writeOutput方法,这完全是两回事!
咱们拆开来聊:
- 先看PetPair类里的成员变量:
private Pet first, second;—— 这里的first和second是Pet类的实例对象,不是PetPair自己的对象。 - PetPair的
writeOutput方法里的代码是先打印提示语,再调用first.writeOutput(),这里的调用是触发Pet类的writeOutput方法,而不是PetPair自己的。换句话说,Pet类本身一定定义了属于它自己的writeOutput方法,比如用来输出宠物的名字、年龄这类专属信息,类似这样:public class Pet { private String name; private int age; public Pet(String name, int age) { this.name = name; this.age = age; } public void writeOutput() { System.out.println("宠物名字:" + name + ",年龄:" + age); } } - 再区分你担心的“递归调用”:真正的递归是方法直接调用自己,比如像下面这种倒计时的写法,才是方法调用自身:
但你这段代码里,PetPair的public void countDown(int n) { if (n > 0) { System.out.println(n); countDown(n - 1); // 这里才是调用自己,属于递归 } }writeOutput和Pet的writeOutput只是名字相同的两个不同方法,分别属于两个不同的类,完全不是递归。
这种写法其实是很常见的职责分离思路:Pet类负责处理单个宠物的信息输出,PetPair类负责处理“一对宠物”的整体输出逻辑(比如先打印提示语,再让每个宠物自己输出详情),这样代码的分工更清晰,也更容易维护。
备注:内容来源于stack exchange,提问作者Jack Travis
相关产品推荐
相关产品推荐

