Java重构:如何处理Student与Professor类的重复属性?
重构方案:提取公共父类
最合理的重构方式是新增一个抽象父类Person,将Student和Professor中重复的属性(name、age、email)以及对应的getter方法封装进去,让两个子类继承这个父类,各自保留独有的属性和业务方法即可。
步骤1:创建Person父类
这个类包含两个子类共有的属性和方法,设为抽象类避免直接实例化:
public abstract class Person { private final String name; private final int age; private final String email; public Person(String name, int age, String email) { this.name = name; this.age = age; this.email = email; } public String getName() { return name; } public int getAge() { return age; } public String getEmail() { return email; } }
步骤2:修改Student类继承Person
移除重复的属性和方法,只保留Student独有的内容,通过super()调用父类构造方法初始化公共属性:
public class Student extends Person { private final String matrNr; private int semester; public Student(String name, int age, String email, String matrNr, int semester) { // 调用父类构造初始化公共属性 super(name, age, email); this.matrNr = matrNr; this.semester = semester; } public String getMatrNr() { return matrNr; } public int getSemester() { return semester; } public void increaseSemester(){ semester += 1; } }
步骤3:修改Professor类继承Person
同样移除重复代码,保留独有的persNr属性和方法:
public class Professor extends Person { private final String persNr; public Professor(String name, int age, String email, String persNr) { super(name, age, email); this.persNr = persNr; } public String getPersNr() { return persNr; } }
重构优势
- 彻底消除代码冗余,符合DRY(Don't Repeat Yourself)原则;
- 后续公共属性/方法的修改只需在Person类中操作一次,所有子类自动同步;
- 清晰体现类之间的继承关系,契合面向对象设计思想。
内容的提问来源于stack exchange,提问作者B. Selin Zaza
相关产品推荐
相关产品推荐

