0

私は 2 つの公開クラスを持っています。人とエンジニア。Engineer は Person クラスから継承されます。今 main() で私は人のオブジェクトを言う

Person abc = new Person();

そして、「abc」をEngineer ieに変換しようとしています

Engineer xyz = (Engineer) abc;

質問:これは合法ですか? 「abc」には異なる属性がある可能性があるため、私はそれを行うことができないと理解しています。

コード:

public class Person { 
      private String firstname; 
      private String lastname; 
      private String gender; 

      public Person(String first, String last, String gen) { 
            firstname = first; 
            lastname = last; 
            gender = gen; 
      } 

      public void setFirstName(String name) { 
            firstname = name; 
      } 

      public void setLastName(String name) { 
            lastname = name; 
      } 

      public void setGender(String gen) { 
            gender = gen; 
      } 

      public String getFirstName() { 
            return firstname; 
      } 

      public String getLastName() { 
            return lastname; 
      } 

      public String getGender() { 
            return gender; 
      } 

     public toString() { 
            return "firstname=" + firstname + "lastname=" + lastname + "gender=" + gender; 
} 

public class SoftwareEngineer extends Person { 
      public String teamname; 
      public String bestlanguage; 

      public SoftwareEngineer(String first, String last, String gen, String team, String lang) { 
            firstname = first; 
            lastname = last; 
            gender = gen; 
            teamname = team; 
            bestlanguage = lang; 
      } 

     public toString() { 
            return "firstname=" + firstname + "lastname=" + lastname + "gender=" + gender + "teamname=" + teamname + "bestlanguage=" + bestlanguage; 


} 

public void main() { 
SoftwareEngineer aaron = new SoftwareEngineer('Aaron','Gottlieb','M','IPSupport','SQL'); 
Person andy = new SoftwareEngineer('Andy','Gardner','M','IP','Java'); 
Person pete = new Person("Pete", "G", "M"); 


Person personAaron = aaron; 
SoftwareEngineer sePete = (SoftwareEngineer) pete; 
SoftwareEngineer seAndy = (SoftwareEngineer) andy; 
pete.teamname = "FooBar"; 
aaron.setLastName("Brian"); 

}
4

1 に答える 1

0

すべてのエンジニアは人ですが、すべてのエンジニアであるとは限りません。次に、それをOOドメインに変換します。いつでもキャストできると思いますPersonEngineer?つまり、すべてのエンジニアだと思いますか?

いいえ、しかしあなたはに尋ねることができます:あなたはエンジニアですか?

if(abc instanceof Engineer) {
  Engineer xyz = (Engineer) abc;
}

しかし、必ずしもそれを知る必要はありません。あなたはすべての人に名前について尋ねることができます、その人がエンジニアであるかどうかは関係ありません:

Person p = new Engineer();
p.getFirstName();
于 2012-08-27T17:24:40.683 に答える