0

所以,我正在做一个家庭作业,我很难按照一些指示去做,我把作业粘贴在下面:

创建五个类的层次结构,外加一个作为变量包含在内的类:

  1. Person 有四个 String 变量:姓名、地址、电话、电子邮件
  2. Student 是 Person 的子类,并且有一个额外的 int 变量状态,它的值分别为 1、2、3 或 4,代表大一、大二、大三、大四
  3. MyDate 具有年、月和日的三个 int 变量
  4. Employee 是 Person 的子类,有一个 String 变量 office,一个 int 变量表示薪水,一个 MyDate 变量表示 dateHired
  5. Staff 是 Employee 的子类,并且有一个额外的 String 变量作为 title
  6. Faculty 是 Employee 的一个子类,并且有一个额外的 String 变量用于 rank,它采用 Professor、Associate Professor、Assistant Professor、Instructor 和 Adjunct 的值。所有六个类的数据都应该是私有的。

至于方法,如果您编写一个具有所有数据参数的构造函数并覆盖 toString() 方法,则可以跳过普通的 setter 和 getter。子类的构造函数应该使用超类的构造函数。子类的 toString() 方法应该使用其超类的 toString() 方法。

让我陷入循环的部分是可以编写一个构造函数,它将涵盖 setter 和 getter 的所有必要参数,而不是在每个子类中编写它们。这可能吗?怎么会这样?

4

4 回答 4

3

您需要在创建子类时使用超类的构造函数。所以应该是:

public class Staff extends Employee {    

    private String title;    

    public Staff(String name, String address, String phone, String email, int status, String title) {
        super(name, address, phone, email, status);
        this.title = title;
    }    
}

使用super(/*params of super class*/)调用超类的构造函数并实例化继承的属性。请注意,您只能调用超类构造函数作为构造函数的第一条语句。如果您没有显式调用超类构造函数,Java 编译器会自动插入对 super()(超类的默认构造函数)的调用。

调用父类的 toString() 使用:

public String toString() {
    return super.toString() + " ,title : " this.title;    
}

类似地编写所有类的构造函数和 toString() 方法。

于 2012-10-19T04:39:58.597 回答
1

至于方法,如果您编写一个具有所有数据参数的构造函数并覆盖 toString() 方法,则可以跳过普通的 setter 和 getter。

我认为这些说明意味着您编写的每个类都可以有一个构造函数,该构造函数接受其所有数据的参数。以MyDate构造函数为例:

public MyDate(int year, int month, int day) {
    ...
}

并且同样覆盖toString()以报告所有这些信息。

于 2012-10-19T04:31:27.283 回答
1

而不是写

 public class A {
   private int b;
   private int c;

   public void setB(int b) {this.b = b;}
   public int getB() {return b;}

   // same for c
}

你允许编码

 public class A {
   private int b;
   private int c;

   public A(int b, int c) {
     this.b = b;
     this.c = c;
   }

   @Override
   public String toString() {
     return "[b = " + b + ", c = " + c + "]";
}

(的实现toString()只是一个例子,它只需要打印所有字段的状态)

于 2012-10-19T04:33:20.073 回答
0

这是你可以做的

Person(String name,String address,String phone,String email){
 //Person constructor
 this.name = name;
 this.address = address;
 this.phone = phone;
 this.email = email;
}

public String toString(){
//toString method
return "Name: "+name+" Address: "+address+" Phone: "+phone+" Email: "+email;
}
于 2012-10-19T04:33:24.347 回答