为什么此类更适合抽象而不是具体?

时间:2019-05-22 14:36:51

标签: java inheritance abstract-class abstract abstraction

为什么该Student类(创建新的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();
}

2 个答案:

答案 0 :(得分:1)

关键是:如果您有多个Student子类,则每个子类都有一个独特的 differentiating 属性,请说“主要类”。

因此:该模型仅允许具有不同“主要班级”的学生,因此防止创建缺少相应“属性”的“原始”学生对象将是有意义的。

但是您必须了解:决定要如何精确构建对象模型的原因(哪些类是抽象的,哪些类不是抽象的)

换句话说:写 this 抽象学生类的人认为,完全像这样做是最适合基本要求的。在不同的上下文中,Student可能不是抽象的。

答案 1 :(得分:0)

通常,学生班级是抽象的,因为您将拥有学生的类型。即高中,大学等

有些学生拥有其他人所没有的信息。例如,一个大学生可能有一个宿舍编号,而高中生则没有。抽象类可让您具有更大的灵活性,而不必为学生锁定单个定义。