package inheritencelatest;
public class InheritenceLatest {
public static void main(String[] args) {
person p1=new person(12,"ekaf","atlanta","male");
employe e1=new employe(23,"ekaf","atlanta","male",12000);
e1.ageCategory();
e1.genderIdentity();
e1.display();
((employe)p1).display();
}
}
class person {
int age;
String name;
String Address;
String ageGroup;
protected String gender;
private String canNotBeAccesed; //cant be accessed by subclass
person(int age,String name,String Address,String gender) {
this.age=age;
this.name=name;
this.Address=Address;
this.gender=gender;
}
String ageCategory() {
if(age<10)
return("kid");
else if(age<20 &&age>10)
return("Teen");
else if(age<50&&age>20)
return("adult");
else
return("senior");
}
protected void genderIdentity() {
if("male".equals(gender))
System.out.println("male");
else if(gender=="female")
System.out.println("female");
else
System.out.println("Special");
}
}
class employe extends person {
double salary;
employe(int age,String name,String Address,String gender,int salary) {
super(age,name,Address,gender);
this.salary=salary;
this.name=name;
}
@Override
protected void genderIdentity() {
if(gender=="male")
salary=salary;
if(gender=="female")
salary=1.5*salary;
else
salary=2*salary;
}
void display() {
System.out.println(age +" " +name+" "+Address+" "+salary+" "+gender+ " "+ageGroup);
}
}
当我运行此代码时,我得到的输出为:
男
23 Ekaf Atlanat 24000.0男性null
线程“主”中的异常java.lang.ClassCastException:inheritencelatest.person不能在Inheritancelatest.InheritenceLatest.main(InheritenceLatest.java:17)处强制转换为heritencelatest.employe。
我的怀疑是
薪水如何变成24000?为什么agecategory为null,当我编写e1.agecategory时,对象e1没有获得ageGroup的值?为什么((employe)p1).display();引发例外?
可能有什么用
人p2 =新雇员(23,“ ekaf”,“ atlanat”,“ male”,12000);?
最佳答案
薪水如何变成24000?
在您的受雇者类别的sexIdentity()方法中,使用==
将gender
与"male"
进行比较。此条件为false,因为gender
和"male"
是不同的String对象(即使它们具有相同的内容/文本)。您应该使用.equals()
来比较两个字符串。现在,薪水加倍,因为gender == "male"
和gender == "female"
都不返回true。
为什么agecategory为空,当我写e1.agecategory时对象e1没有获得年龄类别?
编写e1.agecategory()
时,将调用名为agecategory()
的方法。此方法仅返回String对象,但实际上不对其执行任何其他操作。您没有任何地方可以为agegroup
变量赋值的代码(该代码看起来必须像agegroup = <something>;
,因此该变量将保留其默认值null
。
为什么((employe)p1).display();引发例外?
这是因为,您尝试使用(employe)p1
将p1
对象转换为employe
类型。无法完成此操作,因为p1
仅定义为person
,而不是employe
。另一种方法是可以正常工作,因为通过编写class employe extends person
,每个employe
都知道也是一个person
。
有什么用
人p2 =新雇员(23,“ ekaf”,“ atlanat”,“ male”,12000);
这样做非常有用,因为您正在创建一个变量p2
,该变量可以引用任何类型的person
,并且它不仅限于引用employe
对象。例如,这在您希望能够处理任何类型的person
的情况下很有用。 Java仍然记得该特定人员是受雇者,因此您可以稍后将其转换为更特定的employe
类型,然后在其上调用特定于employe
的方法。