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

如何在条件判断中访问并使用另一个类的变量?

问题解决:在Stemmer构造方法中访问Kstemmer的私有变量makol

嘿,我来帮你搞定这个问题!你现在的需求是在Stemmer的构造方法里访问Kstemmer类中声明的私有变量makol,并做条件判断输出内容对吧?直接按你现在的写法肯定会编译报错——因为私有变量只能在它所属的类内部访问,外部类没法直接碰。下面给你几个可行的实现方案,按推荐程度排序:

方案一:给Kstemmer添加公共Getter方法(最推荐,符合封装原则)

这是面向对象编程里最标准的做法,既保证了类的封装性,又能合法地让外部类获取私有变量的值。

首先修改Kstemmer类,给makol添加一个公共的获取方法:

public class Kstemmer {
    private int makol = 0;
    
    // 新增公共getter方法,用于外部获取makol的值
    public int getMakol() {
        return makol;
    }
}

然后在Stemmer的构造方法里,你需要先创建Kstemmer的实例(或者通过构造参数传入已有的实例),再通过getter方法获取makol的值进行判断:

public class Stemmer {
    public Stemmer() {
        // 创建Kstemmer的实例
        Kstemmer kStemmer = new Kstemmer();
        // 通过getter方法获取makol的值并做判断
        if (kStemmer.getMakol() == 0) {
            System.out.println("avid");
        }
    }
}

方案二:调整makol的访问修饰符(不推荐,破坏封装)

如果你不想写getter方法,也可以直接修改makol的访问权限,但这种方式会破坏类的封装性,只适合临时测试或者非常简单的场景:

修改Kstemmer类,把private改成public或者protected:

public class Kstemmer {
    // 将私有修饰符改为public(或protected,适用于同包/子类场景)
    public int makol = 0;
}

然后在Stemmer里创建实例后直接访问:

public class Stemmer {
    public Stemmer() {
        Kstemmer kStemmer = new Kstemmer();
        if (kStemmer.makol == 0) {
            System.out.println("avid");
        }
    }
}

方案三:让Stemmer继承Kstemmer(适用于类有继承关系的场景)

如果Stemmer本来就应该是Kstemmer的子类,那可以把makol改成protected,这样子类就能直接访问父类的这个变量:

修改Kstemmer类:

public class Kstemmer {
    // 改为protected,允许子类访问
    protected int makol = 0;
}

然后让Stemmer继承Kstemmer,直接访问父类的变量:

public class Stemmer extends Kstemmer {
    public Stemmer() {
        // 直接访问父类的protected变量
        if (makol == 0) {
            System.out.println("avid");
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:20:13