我是Java新手。所以这个问题似乎很幼稚......但是你能帮忙吗?
比如说,我有一个课程如下:
public class Human {
private float height;
private float weight;
private float hairLength;
private HairState hairTooLong = new HairState() {
@Override
public void cut(Human paramHuman) {
Human.this.decreaseHairLength();
}
@Override
public void notCut(Human paramHuman) {
Human.this.increaseHairLength();
}
};
public float increaseHairLength () {
hairLength += 10;
}
public float decreaseHairLength () {
hairLength -= 10;
}
private static abstract interface HairState {
public abstract void cut(Human paramHuman);
public abstract void notCut(Human paramHuman);
}
}
然后我有另一个课程如下:
public class Demo {
public static void main(String[] args) {
Human human1 = new Huamn();
Human.HairState.cut(human1);
}
}
声明
Human.HairState.cut(human1);
无效......
我打算调用公开 cut()
函数,该函数属于hairTooLong
私有属性。
我该怎么做?
答案 0 :(得分:8)
由于HairState
对Human
是私有的,Human
类之外的任何内容都无法了解它。
您可以在Human
中创建一个方法,将调用转发给其私有机制:
public class Human {
. . .
public float cutHair() {
return hairTooLong.cut(this);
}
}
然后从main()
:
System.out.println(human1.cutHair());
答案 1 :(得分:1)
之前评论的另外两个解决方案:
建议先前评论中的解决方案,或此处提供的第一个选项。
如果您感到好奇,可以查看反思API并在此处查看示例:How do I invoke a Java method when given the method name as a string?
答案 2 :(得分:1)
在java中有四个访问级别,默认,私有,公共和受保护。 private的可见性仅限于某一类(即使是子类也无法访问)。您不能在任何其他类中调用私有成员。以下是java访问级别的基本细节。
Access Levels
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
有关详细信息,请查看Oracle docs