0

我正在和朋友们一起做一些 java 编码,这是我们的书给我们带来的问题之一。

  • 用姓名、年龄建立对象人。简单的。
  • 以对象职业扩展对象人,具有工作名称和薪水。
  • 使用两个重载程序,一个提供了人员和专业所需的所有信息。简单,用户超级(blah)
  • 第二个重载者被赋予了一个人对象和信息来制作职业

代码看起来是这样的:

人物对象

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 对象。有任何想法吗?我会很感激帮助!这不是为了成绩,只是为了好玩,我和一些朋友在课堂上取得领先。

4

3 回答 3

4

我认为这里更重要的问题是继承应该对is-a关系建模。在这种情况下 aProfession 不是a Person,所以我看不出有任何理由Profession继承自Person.

Profession和之间更合理的关系Personhas-a,人们先见之明。一个更现实的类结构是:

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;
   }
}

可以对继承关系进行建模的另一种想法是 a ProfessionalPerson,但 相信上面的建模是最准确的。

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;
   } 
}

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

于 2013-10-23T00:05:47.400 回答
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;        
}
于 2013-10-23T00:05:10.490 回答
0

您也可以扩展Person到创建ProfessionalPerson拥有Profession(属性)

于 2013-10-23T00:07:23.003 回答