Java中的继承和构造函数

时间:2012-10-19 04:26:37

标签: java inheritance constructor subclass

所以,我正在完成一项家庭作业,而且我很难按照一些指示行事,我已经粘贴了以下作业:

  

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

     
      
  1. Person有四个String变量:姓名,地址,电话,电子邮件
  2.   
  3. 学生是Person的子类,并且有一个额外的int变量状态,其值为1,2,3或4代表新生,大二,大三,大三
  4.   
  5. MyDate有三个年,月和日的int变量
  6.   
  7. Employee是Person的子类,有一个String变量office,一个是工资的int变量,另一个是dateHired的MyDate变量
  8.   
  9. Staff是Employee的子类,并且为title
  10. 添加了一个额外的String变量   
  11. Faculty是Employee的子类,并且有一个额外的String变量用于排名,其中包含教授,副教授,助理教授,讲师和辅助的值。所有六个类的数据都应该是私有的。
  12.         

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

抛出循环的部分是这样的想法,即可以编写一个构造函数来覆盖setter和getter的所有必要参数,而不是在每个子类中编写它们。这可能吗?怎么会这样?

4 个答案:

答案 0 :(得分: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()方法。

答案 1 :(得分:1)

  

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

我认为方向意味着你编写的每个类可以有一个构造函数,它接受所有数据的参数。以MyDate构造函数为例:

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

同样覆盖toString()以报告所有信息。

答案 2 :(得分: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()的实现只是一个例子,它只需要打印所有字段的状态)

答案 3 :(得分: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;
}