类的对象可以访问其私有方法吗?

时间:2017-07-16 08:26:48

标签: java oop access-modifiers

我是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访问其私有方法?

提前致谢!!

3 个答案:

答案 0 :(得分:3)

允许这样做的唯一原因是您的main方法属于同一个类的主体 - Soldier - 它还包含Hospital类的主体。这允许它访问private类的任何实例的所有Hospital成员和方法。

也就是说,如果Hospital类的对象将被其他类使用,并且应该被允许调用healSoldier,那么你应该公开healSoldierHospital类成为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方法。