2016-08-23 1 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コードで何が間違っていますか?

私はこのコードを実行すると、私のように出力を得る:スレッド "メイン" とjava.lang.ClassCastExceptionで

男性
23 ekaf 24000.0男性ヌルatlanat

例外: inheritencelatest.personはinheritencelatest.employe inheritencelatest.InheritenceLatest.main(InheritenceLatest.java:17)にキャストできません

私の疑問は、給与が24000となりんか

ARE?なぜ私はe1.agecategoryを書くと、agecategoryがnullで、オブジェクトにe1がageGroupの値を取得しなかったのですか?なぜ((employe)p1).display();例外が発生していますか?


人p2 = new employe(23、 "ekaf"、 "atlanat"、 "male"、12000);?

+1

'p1'は'雇用者 'ではなく '人物'です。 – tkausl

+1

投稿するときにコードを書式設定するためにもっと努力してください。それは現時点では全面的に行われています - これは、問題を実証するための最小限の*例が好きではありません。 –

+0

また、読んでくださいhttp://stackoverflow.com/questions/513832 –

答えて

2

給料はどのように24000になるのですか?あなたのemployeクラスのgenderIdentity()メソッドで

、あなたは"male"genderを比較する==を使用しています。 gender"male"は異なるStringオブジェクトです(同じ内容/テキストを持っていても同じです)。代わりに2つの文字列を比較するには、.equals()を使用する必要があります。今度は、gender == "male"でもgender == "female"も真を返さないので、給料は2倍になります。

私はe1.agecategoryを書くと、なぜagecategoryがnullなのですか?

e1.agecategory()と記述すると、agecategory()というメソッドが呼び出されます。このメソッドはStringオブジェクトだけを返しますが、実際にはそれ以外の処理は行いません。あなたはagegroup = <something>;のように見えなければならないだろうagegroup変数(に値を代入どこでも任意のコードを持っていないので、変数はnullのデフォルト値を保持します。

理由((employe)P1).display (が);?。例外を発生さ

(employe)p1で、あなたはemploye型にp1オブジェクトをキャストしようと、ためですこれは行うことはできませんp1person、およびないemployeするだけで定義されたので。それ以外の方法でうまくいくのは、writi nはclass employe extends personであり、全てemployepersonであることも知られている。 人P2 =新しいemploye(23、 "ekaf"、 "atlanat"、 "男性"、12000)を使用することができるもの

。あなたがpersonのいずれかの種類を参照することができ、変数p2を作成している、それが唯一のemployeオブジェクトを参照に限定されるものではないので、

これを行うと便利です。これは、例えば、どんな種類のpersonも処理できるようにしたい場合に便利です。 Javaはまだこの特定の人物が従業員であることを覚えているので、より具体的なemployeタイプにキャストし、employe固有のメソッドを呼び出すことができます。

+0

あなたの答えにはありがとうございます。それは働いて、私の多くの助け:) – ekaf

関連する問題