这个关于继承的java代码有什么问题?

时间:2016-08-23 12:18:21

标签: java inheritance

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

1 个答案:

答案 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特定的方法。