Java 继承和重载构造函数
我正在和朋友们一起玩java编码,这是我们的书给我们带来的问题之一Java 继承和重载构造函数,java,inheritance,Java,Inheritance,我正在和朋友们一起玩java编码,这是我们的书给我们带来的问题之一 使用姓名、年龄构建对象。简单 使用对象职业扩展对象人员,该职业具有职务名称和薪资 使用两个重载,其中一个重载提供了个人和职业的所有信息 需要。简单,用户超级(废话) 第二个重载是给一个人对象和信息,使其专业化 代码大致如下所示: 人客体 public class Person { private String name; private int age; public Person(String n, int a) {
- 使用姓名、年龄构建对象。简单李>
- 使用对象职业扩展对象人员,该职业具有职务名称和薪资李>
- 使用两个重载,其中一个重载提供了个人和职业的所有信息 需要。简单,用户超级(废话)
- 第二个重载是给一个人对象和信息,使其专业化
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对象。有什么想法吗?我非常感谢你的帮助!这不是为了分数,只是为了好玩,我和一些朋友在班上取得了进步。我想是这样的:
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;
}
我是这样想的:
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;
}
我认为这里更重要的问题是继承应该是对is-a关系的建模。在这个场景中,
Profession
不是Person
,所以我看不出Profession
从Person
继承的任何原因
职业
和人
之间更合理的关系是has-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;
}
}
可以对继承关系进行建模的另一个想法是专业人士
,但我相信上面的建模是最准确的
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;
}
}
此外,您应该始终使用描述性变量名,以便阅读您的代码的任何其他人都可以确定哪些变量表示什么。请记住,我遗漏了任何错误处理和默认构造函数。我认为这里更重要的问题是继承应该对is-a关系建模。在这个场景中,
Profession
不是Person
,所以我看不出Profession
从Person
继承的任何原因
职业
和人
之间更合理的关系是has-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;
}
}
可以对继承关系进行建模的另一个想法是专业人士
,但我相信上面的建模是最准确的
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;
}
}
此外,您应该始终使用描述性变量名,以便阅读您的代码的任何其他人都可以确定哪些变量表示什么。请记住,我遗漏了任何错误处理和默认构造函数。您可以扩展
Person
来创建ProfessionalPerson
来拥有professional
(属性)您可以扩展Person
来创建ProfessionalPerson
来拥有professional
(属性)太为变量生成getter,然后使用super(p.getN(),p.getA())
或者实现Person(Person p)
constructorI喜欢Person(Person p)的想法,但是我该怎么做呢?至于get变量,这绝对有效!我忘了我们已经被教导过了。publicperson(Person p){this.name=p.name;this.age=p.age;}
Profession
不应该使用Person
,另一种方法是为变量制作getter,然后使用super(p.getN(),p.getA())
或者实现Person(Person p)
constructorI喜欢Person(Person p)的想法,但是我该怎么做呢?至于get变量,这绝对有效!我忘了我们已经被教导过了。公众人物(Person p){this.name=p.name;this.age=p.age;}
职业
不应该使用人
,这是另一种方法是的,关键是。人不应该用职业扩展,但如果formn必须这样做(因为这不是现实生活中的项目,而是一些练习),Robin回答。@i或任务要求“用职业扩展对象人”(即包括职业)是的,这是关键。人不应该用职业扩展,但如果formn必须这样做(因为这不是现实生活中的项目,而是一些练习),Robin回答。@Igor任务要求“用职业扩展对象人”(即包括职业)让Profession
扩展和包含Person
是完全不合逻辑的,而这不是任务要求OP做的事情让Profession
扩展和包含Person
是完全不合逻辑的,而不是任务要求OP做的事情