我是OOPS编程的初学者。我在一本书中经历了访问修饰符的概念并被困在一个地方:
代码如下(我不关心代码的语法,因为怀疑是概念性的代码):
public class Soldier{
private int health;
public int getHealth(){
return health;
}
public void setHealth(int newHealth){
health = newHealth;
}
}
class Hospital{
private void healSoldier(Soldier soldierToHeal){
int health = soldierToHeal.getHealth();
health = health + 10;
soldierToHeal.setHealth(health);
}
public static void main(){
Soldier mySoldier = new Soldier();
mySoldier.setHealth(100);
Hospital militaryHospital = new Hospital();
mySoldier.setHealth(10); //Soldier wounded
militaryHospital.healSoldier(mySoldier);//Soldier's health increased by 10
}
}
我对healSoldier(Soldier soldierToHeal)
方法有疑问。由于此方法是私有的,因此只能根据我对Hospital
访问修饰符的理解,在private
类中访问它。但是我们在main
中使用相同的方法来治疗士兵。类的对象是否可以从main
访问其私有方法?
提前致谢!!
答案 0 :(得分:3)
允许这样做的唯一原因是您的main
方法属于同一个类的主体 - Soldier
- 它还包含Hospital
类的主体。这允许它访问private
类的任何实例的所有Hospital
成员和方法。
也就是说,如果Hospital
类的对象将被其他类使用,并且应该被允许调用healSoldier
,那么你应该公开healSoldier
。 Hospital
类成为Soldier
类的内部类是没有意义的。它应该是顶级课程。
答案 1 :(得分:1)
类的对象是否可以访问它 main的私有方法?
如果在该类的方法中操作对象,是的。
在这种情况下,main(String[] args)
方法是Hospital
的方法:
class Hospital {
private void healSoldier(Soldier soldierToHeal) {
int health = soldierToHeal.getHealth();
health = health + 10;
soldierToHeal.setHealth(health);
}
public static void main(String[] args) {
Soldier mySoldier = new Soldier();
mySoldier.setHealth(100);
Hospital militaryHospital = new Hospital();
mySoldier.setHealth(10); // Soldier wounded
militaryHospital.healSoldier(mySoldier);// Soldier's health increased by 10
}
}
我不关心代码的语法,因为怀疑是一个 概念性的一个)
语法很重要。
您可能在实际问题中错误地输入了该类的代码,因为main()
方法似乎是在任何类之外定义的。
答案 2 :(得分:0)
私有变量和方法可以从声明它的类的实例访问。
在你的情况下,通过声明它的类Hospital的对象来调用healSoldier方法。