我有一个超类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();
谢谢!
答案 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)