如何在条件判断中访问并使用另一个类的变量?
问题解决:在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
相关产品推荐
相关产品推荐

