【问题标题】:Is class casting allowed?允许类转换吗?
【发布时间】:2026-02-13 01:45:02
【问题描述】:

我有两个公开课;人和工程师。 Engineer 继承自 Person 类。 现在在 main() 我有一个人对象说

Person abc = new Person();

我正在尝试将“abc”转换为工程师,即

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

}

【问题讨论】:

  • 你说的是什么语言?
  • 完全取决于语言和人与工程师的关系。
  • 等一下,我会发布我想了解的代码

标签: oop class casting type-conversion


【解决方案1】:

每个工程师都是,但不是每个都是工程师。现在将其翻译到您的 OO 域。你认为你总是可以将Person 转换为Engineer 吗? IE。假设每个都是工程师

没有,但你可以问你是工程师吗?

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

但您不必总是知道这一点。您可以向每个人询问姓名,无论该人是否为工程师:

Person p = new Engineer();
p.getFirstName();

【讨论】:

  • 好的,我理解了你刚刚向我解释的概念......现在我在上面的代码中是:Person andy = new SoftwareEngineer('Andy','Gardner','M',' IP','Java');我试图转换“SoftwareEngineer seAndy = (SoftwareEngineer) andy;”我想现在应该是有效的
  • @tech_learning:在这种特殊情况下有效,但并非总是如此,例如当有SoftwareEngineerMechanicalEngineer 时——你无法保证一个人背后隐藏着什么样的工程师。属性在这里无关,它与类型有关。