为什么抽象类支持静态而实例块和接口不支持?

时间:2018-11-16 09:31:18

标签: java

为什么抽象类支持静态而实例块和接口不支持?即使我们无法实例化抽象类,抽象类也支持构造函数。

abstract class Abs{
    final int x;
    final int y;
    final static int z;

    public Abs(){
        x=10
    }

    {
        y=10;
    }

    static{
        z=10;
    }
}

在上面的代码中,我正在运行时初始化变量,但是同一件事不适用于接口。为什么?

2 个答案:

答案 0 :(得分:3)

顾名思义,该接口主要用于定义协定而不是实现(在Java 8之前),但是您可以初始化字段。

但是,您可以拥有一个嵌套的类或枚举,该嵌套的类或枚举具有所需的任意多的代码。

答案 1 :(得分:0)

界面

没有构造函数或初始化块,因为您不能创建接口实例(仅对于已实现的类)。所有变量均为 public static final ,所有方法均为 public 。方法可以使用 default 关键字进行默认实现。

抽象类

这是普通的类,但是您不能创建此类的实例。但是它们具有任何变量,静态块和构造函数(公共构造函数是无用的,因为只有嵌套类可以调用它,因此建议将所有构造函数标记为受保护的)。

相关问题