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

Java中同名方法调用的原理及PetPair类代码疑问

Java中同名方法调用的原理及PetPair类代码疑问

嘿,我太懂你刚看到这段代码时的懵圈感了!一开始我也差点看错,咱们慢慢把这个点捋明白~

你现在的核心误解是:你以为PetPair的writeOutput方法在调用自己,但实际上它是在调用成员变量first和second的writeOutput方法,这完全是两回事!

咱们拆开来聊:

  1. 先看PetPair类里的成员变量:private Pet first, second; —— 这里的first和second是Pet类的实例对象,不是PetPair自己的对象。
  2. 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);
        }
    }
    
  3. 再区分你担心的“递归调用”:真正的递归是方法直接调用自己,比如像下面这种倒计时的写法,才是方法调用自身:
    public void countDown(int n) {
        if (n > 0) {
            System.out.println(n);
            countDown(n - 1); // 这里才是调用自己,属于递归
        }
    }
    
    但你这段代码里,PetPair的writeOutput和Pet的writeOutput只是名字相同的两个不同方法,分别属于两个不同的类,完全不是递归。

这种写法其实是很常见的职责分离思路:Pet类负责处理单个宠物的信息输出,PetPair类负责处理“一对宠物”的整体输出逻辑(比如先打印提示语,再让每个宠物自己输出详情),这样代码的分工更清晰,也更容易维护。

备注:内容来源于stack exchange,提问作者Jack Travis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 15:49:34