Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将超类抽象化是否可能且有意义?_Java - Fatal编程技术网

Java 将超类抽象化是否可能且有意义?

Java 将超类抽象化是否可能且有意义?,java,Java,我被告知:一个类可以扩展一个具体的超类,并重写一个实现的方法使其抽象 如果方法变得抽象,那么相应的超类也应该变得抽象 这是正确的吗?如果是这样,使超类或超类中的方法变得抽象是否有意义?要包含抽象方法,类本身也必须声明为抽象 当行为特定于每个子类化对象时,可以使用抽象方法。虽然这也可以通过接口实现,但您可能更喜欢使用抽象类,因为它们也可以包含已实现的方法,或者您可能希望声明非静态和最终的字段。注意,当一个类变得抽象时,它就不能再被实例化了 阅读有关抽象类的更多信息。如果类中包含抽象方法,则无论您是

我被告知:一个类可以扩展一个具体的超类,并重写一个实现的方法使其抽象

如果方法变得抽象,那么相应的超类也应该变得抽象


这是正确的吗?如果是这样,使超类或超类中的方法变得抽象是否有意义?

要包含抽象方法,类本身也必须声明为抽象

当行为特定于每个子类化对象时,可以使用抽象方法。虽然这也可以通过接口实现,但您可能更喜欢使用抽象类,因为它们也可以包含已实现的方法,或者您可能希望声明非静态和最终的字段。注意,当一个类变得抽象时,它就不能再被实例化了


阅读有关抽象类的更多信息。

如果类中包含抽象方法,则无论您是否将其抽象化都是必须的。不能有具有抽象方法的非抽象类

您是否应该声明一个方法抽象或在您的超类中实现它取决于您的具体用例。是否有一种默认行为对所有可能的超级类的具体实现都有意义?那么您可能想要实现它。如果情况并非如此,则将其声明为抽象,并让子类接管

我被告知:一个类可以扩展一个具体的超类,并重写一个实现的方法使其抽象

如果方法变得抽象,那么相应的超类也应该变得抽象

这是正确的吗

我认为这是不正确的

以下面的代码为例

public class Father {
    public void print() {
        System.out.println("Father");
    }
}

public abstract class Son extends Father {
    @Override
    public abstract void print(); /* no need to abstract the superclass */

    // and other abstract or concrete methods
}

public class Grandson extends Son {
    @Override
    public void print() {
        System.out.println("Grandson");
    }
}