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)p1p1对象转换为employe类型。无法完成此操作,因为p1仅定义为person,而不是employe。另一种方法是可以正常工作,因为通过编写class employe extends person,每个employe都知道也是一个person


  有什么用
  人p2 =新雇员(23,“ ekaf”,“ atlanat”,“ male”,12000);


这样做非常有用,因为您正在创建一个变量p2,该变量可以引用任何类型的person,并且它不仅限于引用employe对象。例如,这在您希望能够处理任何类型的person的情况下很有用。 Java仍然记得该特定人员是受雇者,因此您可以稍后将其转换为更特定的employe类型,然后在其上调用特定于employe的方法。

10-07 13:09