抽象类初始化

Use*_*590 0 java abstract-class abstract-methods

我有一个抽象类:

abstract class Shape {

    public String color;
    public Shape() {
    }
     public void setColor(String c) {
        color = c;
    }
    public String getColor() {
        return color;
    }

    public double area() {
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个提供非抽象方法然后我想初始化它像:

     Shape object = new Shape();
Run Code Online (Sandbox Code Playgroud)

所以在初始化时,它仍然给我一个错误,但为什么呢?如果我在类中提供一个抽象方法,那么可以理解该类无法初始化.在这种情况下,为什么还会出错?任何帮助,将不胜感激

Jon*_*eet 6

初始化它仍然给我一个错误,但为什么

因为这个类是抽象的.抽象类根本无法直接实例化,无论它是否具有抽象方法.从JLS 部分8.1.1.1:

如果尝试使用类实例创建表达式(第15.9节)创建抽象类的实例,则这是编译时错误.

如果您没有任何抽象方法,并且希望能够直接实例化该类,则使该类非抽象.使一个没有抽象方法抽象的类的唯一原因强制使用具体的子类.