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

Java: using setter of a subclass when creating an object of type Superclass

我有一个超类 Person 和两个子类 Man 和 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 对象并通过显示“age: with getAge.

的值来测试 setter 是否有效以及 initAge 是否有效

我还必须使用以下方法初始化对象:

Person p1 = new Man();

但是,如果以这种方式初始化,我将无法访问 Man 的 setters 和 getter。除了这样做之外,还有其他解决方法吗:

Man p1 = new Man();

谢谢!

p1 转换为 Man:

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

你可以给Person添加抽象方法class:

public abstract class Person {

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

或者,如果方法与性别无关,则将它们移至父级,以便 Man 和 Woman 可以继承。

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

现在,为了以 Person 的身份访问 setter 和 getter,您需要通过在其上转换 Man 类型来屏蔽它。

((Man) p1).setAge(double)