这个继承的java代码有什么错误?
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男性空
异常在线程 “主要” java.lang.ClassCastException: inheritencelatest.person无法转换为inheritencelatest.employe继承权限.InheritenceLatest.main(InheritenceLatest.java:17)
我,怀疑是
如何薪水变成24000?为什么agecategory为null,在我编写e1.agecategory时没有反对e1获得ageGroup的值?为什么((employe)p1).display();正在引发异常?
可以使用什么
person p2 = new employe(23,“ekaf”,“atlanat”,“male”,12000);?
工资如何变成24000?
在你的雇工类的genderIdentity()方法,您可以使用==
比较gender
到"male"
。这种情况是错误的,因为gender
和"male"
是不同的字符串对象(即使它们具有相同的内容/文本)。您应该使用.equals()
来比较两个字符串。现在,工资增加了一倍,因为gender == "male"
和gender == "female"
都不会返回true。
为什么agecategory为null没有对象e1在我编写e1.agecategory时获取年龄类别?
当您编写e1.agecategory()
时,您可以调用名为agecategory()
的方法。这个方法只返回一个String对象,但实际上并没有做任何其他的事情。您没有任何地方的任何代码,赋值给变量agegroup
(这将有看起来像agegroup = <something>;
,所以变量保持的null
它的默认值。
为什么((雇工)P1)。显示();?是提高例外
这是因为,与(employe)p1
,您尝试p1
对象强制转换为employe
型这不能做,因为p1
才被定义为一个person
,而不是employe
。另一种方式可以正常工作,因为通过写作ng class employe extends person
,每employe
也被称为person
。
什么可能是 的使用人p2 =新雇员(23,“ekaf”,“atlanat”,“男”,12000);
,因为你正在创建一个变量p2
可以引用任何类型的person
,并且不局限于仅参考employe
对象这样做可能是有用的。例如,在希望能够处理任何种类的person
的情况下,这非常有用。 Java仍然记得,这个特定的人是一名雇员,所以你可以稍后将它转换为更具体的employe
类型,并调用employe
特定的方法。
非常感谢你的答案。它的工作和帮助了我很多:) – ekaf
“p1”是一个“人”,而不是“雇主”。 – tkausl
当您发布代码时,请更加努力地设置您的代码格式。这一切都在这个时刻 - 这不像一个*最小*的例子来证明问题。 –
你也应该阅读阅读http://*.com/questions/513832 –