[英]How to give more than one role for an object in java?
学生和老师 class 继承自人 class,因为 inheritance 不灵活,ZA8CFDE6331BD59EB2AC96F89111111C4 将是其中之一。 为了解决这个问题,我添加了一个抽象的 class 角色,并在人与角色之间建立关联,学生和老师继承自角色 class,这样一个实例就可以同时扮演学生和老师的角色。问题是让老师的实例 ZA2F2ED4F8EBC2CBB4C21A29DZ 也可以是学生还是学生也教如何在主class中测试?
public class Person {
private int ssn;
private String name;
private List<PersonRole> roles;
public Person(int ssn, String name) {
this.ssn = ssn;
this.name = name;
roles = new ArrayList<PersonRole>();
}
public int getSsn() {
return ssn;
}
public String getName() {
return name;
}
}
/////////////// PersonRole /////////////////
public abstract class PersonRole {
private List<PersonRole> learning;
private List<PersonRole> teaching;
public PersonRole(List<PersonRole> learning, List<PersonRole> teaching) {
this.learning = learning;
this.teaching = teaching;
}
public List<PersonRole> getLearning() {
return learning;
}
public List<PersonRole> getTeaching() {
return teaching;
}
public void addAsStudent(PersonRole p) {
learning.add(p);
}
public void addAsTeacher(PersonRole p) {
learning.add(p);
}
}
///////////// Teacher //////////////
public class Teacher extends PersonRole {
private String faultyName;
private int yearsOfExperence;
public Teacher(String faultyName, int yearsOfExperence) {
super();
this.faultyName = faultyName;
this.yearsOfExperence = yearsOfExperence;
}
public String getFaultyName() {
return faultyName;
}
public int getYearsOfExperence() {
return yearsOfExperence;
}
}
/////////// Student ////////////////
public class Student extends PersonRole {
private String collegeName;
private String major;
public Student(String collegeName, String major) {
super();
this.collegeName = collegeName;
this.major = major;
}
public String getCollegeName() {
return collegeName;
}
public String getMajor() {
return major;
}
}
////// Main ///////////////
public class Main {
public static void main(String[] args) {
PersonRole p1 = new Student("univ of Michigan", "CS");
PersonRole p3 = new Student("Iowa state univ", "managemnt");
PersonRole p2 = new Teacher("computer science", 3);
PersonRole p4 = new Teacher("Management", 2);
Person person = new Person(1042327867, "Mike Rose");
person.addRole(p1);
person.addRole(p2);
person.addRole(p3);
person.addRole(p4);
for (PersonRole c: roles) {
System.out.println(c);
}
}
}
我会像您一样对其进行测试,但 inheritance 的层次结构看起来不错。 为什么不给 PersonRole 一个构造函数和属性,以便孩子们可以在他们的构造函数中使用 super() 并重用一些代码?
试试这个来打印你的角色:
List<PersonRole> roles = person.getRole();
for(PersonRole role: roles) {
System.out.println(role);
}
然后在 Student 和 Teacher 类中添加一个 toString 方法:
public String toString() {
return "Student {" + "collegeName=" + collegeName + ", major=" + major + '}';
}
public String toString() {
return "Teacher {" + "faultyName=" + faultyName + ", yearsOfExperence=" + yearsOfExperence + '}';
}
结果将是这样的:
Student {collegeName=maharashi univ, major=compro}
Teacher {faultyName=computer science, yearsOfExperence=3}
Student {collegeName=Iowa state univ, major=managemnt}
Teacher {faultyName=Management, yearsOfExperence=2}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.