所以,我正在完成一项家庭作业,而且我很难按照一些指示行事,我已经粘贴了以下作业:
创建一个包含五个类的层次结构,以及一个作为变量包含在内的类:
- Person有四个String变量:姓名,地址,电话,电子邮件
- 学生是Person的子类,并且有一个额外的int变量状态,其值为1,2,3或4代表新生,大二,大三,大三
- MyDate有三个年,月和日的int变量
- Employee是Person的子类,有一个String变量office,一个是工资的int变量,另一个是dateHired的MyDate变量
- Staff是Employee的子类,并且为title
添加了一个额外的String变量- Faculty是Employee的子类,并且有一个额外的String变量用于排名,其中包含教授,副教授,助理教授,讲师和辅助的值。所有六个类的数据都应该是私有的。
醇>对于方法,如果编写一个包含所有数据参数的构造函数并覆盖toString()方法,则可以跳过普通的setter和getter。子类的构造函数应该使用超类构造函数。子类的toString()方法应该使用超类的toString()方法。
抛出循环的部分是这样的想法,即可以编写一个构造函数来覆盖setter和getter的所有必要参数,而不是在每个子类中编写它们。这可能吗?怎么会这样?
答案 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;
}