Java:在创建Superclass类型的对象时使用子类的setter

时间:2015-02-07 19:43:17

标签: java subclass getter-setter superclass

我有一个超类Person和两个子类Man and Woman

在子类Man中,我有一个实例变量age:

public class Man extends Person{

   private double age;

   public final static double MIN_AGE = 0.0;
   public final static double MAX_AGE = 65.0;

  //no argument constructor
  public Man(){
    super();
    initAge();  // This randomly selects age
  }

   /* Setters and getters */
   public void setAge (double ageIn) 
   {
      /* Assign a value only if it is within the allowed range */
      if (ageIn>= MIN_AGE && ageIn<= MAX_AGE )
      {
        this.age = ageIn;
      }
      else if (ageIn< MIN_AGE)
      {
        this.age = MIN_AGE;
      }
      else if (ageIn > MAX_AGE)
      {
        this.age = MAX_AGE;
      }
   }

  public double getAge()
  {
    return age;
  }
} 

现在,我的任务是创建一个Man对象,并通过显示&#34; age:with getAge的值来测试setter是否有效以及initAge是否正常工作。

我还必须使用以下内容初始化对象:

Person p1 = new Man();

但是,如果以这种方式初始化,我无法访问Man的setter和getter。有没有办法解决这个问题:

Man p1 = new Man();

谢谢!

3 个答案:

答案 0 :(得分:1)

p1投放到Man

((Man) p1).setAge(13);

答案 1 :(得分:1)

您可以向Person类添加抽象方法:

public abstract class Person {

    public abstract double getAge();
    public abstract setAge(double ageIn);
}

或者,如果这些方法与性别无关,请将它们移到父级,这样男人和女人就可以继承。

答案 2 :(得分:1)

您将不得不使用Person p1 = new Man();因为如果您真的不想创建实例化new Man()的Man对象,这是唯一的方法。

现在,为了以人员身份访问setter和getter,你需要通过在其上面输入Man类型来掩盖它。

((Man) p1).setAge(double)