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)
我有一个超类 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)