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男性无效
线程中的异常“main”java.lang.ClassCastException:inheritencelatest.person无法强制转换为inheritencelatest的继承性。在继承最大化的情况下.InheritenceLatest.main(InheritenceLatest.java:17)
我的不满
薪水怎么变成24000?为什么agecategory为null,当我写e1.agecategory时,没有对象e1获取ageGroup的值?为什么((employe)p1).display();提出异常?
可以使用什么 person p2 = new employe(23,“ekaf”,“atlanat”,“male”,12000);?
答案 0 :(得分:2)
薪水怎么变成24000?
在您的员工类的genderIdentity()方法中,您使用==
将gender
与"male"
进行比较。这种情况是错误的,因为gender
和"male"
是不同的String对象(即使它们具有相同的内容/文本)。您应该使用.equals()
来比较两个字符串。现在,工资增加了一倍,因为gender == "male"
和gender == "female"
都没有返回true。
为什么agecategory为null,当我写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
。
可能是什么用途 person p2 = new employe(23,“ekaf”,“atlanat”,“male”,12000);
执行此操作非常有用,因为您创建的变量p2
可以引用任何类型的person
,并且不仅限于引用employe
个对象。例如,在您希望能够处理任何类型的person
的情况下,这非常有用。 Java仍然记得这个特定的人是一个雇员,所以你可以稍后将其转换为更具体的employe
类型,并在其上调用employe
特定的方法。