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

Java同包不同类文件间如何访问变量?还有哪些其他实现方式?

让Receiver类访问Sender类变量的几种方案(替代继承)

首先,先给你说最简单的实现方式:你的Sender类里的val是静态变量,它属于类本身而不是某个实例,所以完全不需要用继承来访问!直接在Receiver里通过Sender.val就能拿到这个变量,这比继承更合理——毕竟继承是用来表达"is-a"的类关系,而你只是要访问一个静态变量,用继承反而会让代码语义混乱。

修改后的Receiver.java代码如下:

class Receiver{
    public void show(){
        System.out.println("Receiver value=" + Sender.val);
    }
}

运行你的Main类,就能得到和继承方案一样的效果,而且代码逻辑更清晰。

接下来给你列举其他几种可行的实现方式,适用于不同场景:

1. 构造方法传入Sender实例(适用于非静态变量)

如果你的val不是静态变量,而是每个Sender实例独有的成员变量,那可以在创建Receiver的时候,把Sender对象传进去保存为成员变量,之后就能访问它的val了。

先修改Sender.java把val改成非静态:

class Sender{
    int val=0; // 去掉static关键字
    public void show(){
        System.out.println("Sender value="+val);
        val++;
    }
}

然后修改Receiver.java:

class Receiver{
    private Sender senderInstance;
    
    // 通过构造方法接收Sender对象
    public Receiver(Sender sender){
        this.senderInstance = sender;
    }
    
    public void show(){
        System.out.println("Receiver value=" + senderInstance.val);
    }
}

最后在Main.java里创建Receiver时传入sender实例:

class Main{
    public static void main(String args[]){
        Sender sender=new Sender();
        Receiver receiver=new Receiver(sender); // 传入sender对象
        sender.show();
        receiver.show();
    }
}

2. 提供Getter方法(更符合封装原则)

为了遵循面向对象的封装性,不建议直接访问类的成员变量,最好给Sender添加一个Getter方法,不管val是静态还是非静态都适用。

比如给Sender添加Getter:

class Sender{
    static int val=0;
    public void show(){
        System.out.println("Sender value="+val);
        val++;
    }
    
    // 静态Getter方法对应静态变量
    public static int getVal(){
        return val;
    }
}

然后Receiver里通过Getter访问:

class Receiver{
    public void show(){
        System.out.println("Receiver value=" + Sender.getVal());
    }
}

这种方式的好处是,以后如果val的内部实现逻辑变了(比如加了计算逻辑),只需要修改getVal()方法,Receiver的代码完全不用动,耦合度更低。

为什么不推荐用继承?

你之前用继承实现的方式虽然能跑通,但其实是滥用继承:继承的核心是表达类之间的"是一个"关系(比如Dog extends Animal),而Receiver和Sender显然不是这种关系。用继承会让两个类的耦合度变高,以后Sender的任何修改(比如添加新的方法、修改父类逻辑)都可能影响到Receiver,不利于代码维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:34:37