继承和重载的构造函数

时间:2013-10-22 23:58:55

标签: java inheritance

我正在做一些java编码,以便与朋友一起玩,这就是我们的书向我们提出的问题之一。

  • 使用姓名,年龄构建对象人员。简单。
  • 使用对象专业扩展对象人员,具有工作名称和工资。
  • 使用两个上传者,一个给予所有信息的人和专业 需要。简单,用户超级(等等)
  • 第二个上传者是一个人的对象和信息来做职业

代码看起来像这样:

人物对象

public class Person
{

private String name;
private int age;

public Person(String n, int a)
{
    name=n;
    age=a;
}

}

专业对象

public class Profession extends Person
{

private String jobName;
private int salary;

public Profession(String n, int a, String j, int s)
{
    super(n,a);
    jobName=j;
    salary=s;
}

public Profession(Person p, String j, int s)
{
    //this is where my problem is
}

}

我不知道如何处理person对象。有任何想法吗?我很感激帮助!这不是一个年级,只是一些朋友,我在课堂上取得了乐趣。

3 个答案:

答案 0 :(得分:4)

我认为这里更重要的问题是继承应该模拟 is-a 关系。在这种情况下,Profession 不是 Person,因此我没有看到ProfessionPerson继承的原因。

ProfessionPerson之间更合理的关系是 has-a ,People 拥有 preofessions。一个更现实的类结构是:

class Person {
   private String     name;
   private int        age; 
   private Profession profession;

   public Person(String name, int age) { 
      this.name = name;
      this.age  = age;
   }

   public setProfession(Profession p) {
      this.profession = p;
   }
}

class Profession {
   private String job;
   private int salary;

   public Profession(String job, int salary) {
      this.job = job;
      this.salary = salary;
   }
}

可以为继承关系建模的另一个想法是ProfessionalPerson,但 I 认为上面的建模是最准确的。

class ProfessionalPerson extends Person {
   private String job;
   private int salary;

   public ProfessionPerson(String name, int age, String job, int salary) {
      super(name, age);
      this.job = job;
      this.salary = salary;
   } 
}

此外,您应始终使用描述性变量名称,因此阅读代码的任何人都可以确定哪些变量意味着什么。请记住,我遗漏了任何错误处理和默认构造函数。

答案 1 :(得分:1)

我认为是这样的:

public Profession(Person p, String j, int s)
{
    super(p.getName(), p,getAge);//asuming you hava getters for name and salary
    jobName = j;
    salary = s;        
}

答案 2 :(得分:0)

您可以延长Person以创建ProfessionalPerson以获得Profession(属性)