我正在做一些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对象。有任何想法吗?我很感激帮助!这不是一个年级,只是一些朋友,我在课堂上取得了乐趣。
答案 0 :(得分:4)
我认为这里更重要的问题是继承应该模拟 is-a 关系。在这种情况下,Profession
不是 Person
,因此我没有看到Profession
从Person
继承的原因。
Profession
和Person
之间更合理的关系是 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
(属性)