2016-08-23 52 views
0
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); 
    } 

}这个继承的java代码有什么错误?

当我运行这段代码我得到输出:

男性
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);?

+1

“p1”是一个“人”,而不是“雇主”。 – tkausl

+1

当您发布代码时,请更加努力地设置您的代码格式。这一切都在这个时刻 - 这不像一个*最小*的例子来证明问题。 –

+0

你也应该阅读阅读http://stackoverflow.com/questions/513832 –

回答

2

工资如何变成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特定的方法。

+0

非常感谢你的答案。它的工作和帮助了我很多:) – ekaf