【发布时间】:2019-10-09 02:09:30
【问题描述】:
为什么这个 Student 类(一个创建新学生对象并为其分配唯一 ID 的类)更适合作为抽象类而不是具体类?每个创建的学生对象都被分配了自己唯一的 ID 权限,那么为什么不只在类本身内部实现graduate() 方法,而不是由继承的类实现呢?
public abstract class Student {
protected int id;
private static int lastID = 0;
protected String firstName;
protected String familyName;
public Student(String firstName, String familyName) {
id = Student.nextID();
this.firstName = firstName;
this.familyName = familyName;
}
private static int nextID() {
return ++lastID;
}
public String toString() {
return firstName + " " + familyName;
}
// Generate string containing graduation information
public abstract String graduate();
}
【问题讨论】:
-
Student有什么子类吗?他们是如何不悔改抽象方法的? -
如果没有对设计的其余部分有更广泛的了解,您将无法判断这一点。是否有各种各样的学生仍然共享部分实际代码?
-
你为什么认为它是?这将取决于它应该如何使用。
-
我不确定我是否正确理解了您的问题,也许可以提供更多信息,为什么您会问这个问题。这取决于上下文。如果您打算创建也可以毕业但需要不同实现的 Student 子类,那么抽象实现是好的。如果性能没有问题并且您不确定是否需要子类,则将函数抽象化并提供默认实现可能是最通用的解决方案。
-
只是想知道:您的问题是否得到解答(也许考虑接受),还是您需要更多信息?
标签: java inheritance abstract-class abstract abstraction