Java 为什么抽象类支持静态块和实例块,而接口不支持?
为什么抽象类支持静态和实例块,而接口不支持?抽象类也支持构造函数,即使我们不能实例化抽象类Java 为什么抽象类支持静态块和实例块,而接口不支持?,java,Java,为什么抽象类支持静态和实例块,而接口不支持?抽象类也支持构造函数,即使我们不能实例化抽象类 abstract class Abs{ final int x; final int y; final static int z; public Abs(){ x=10 } { y=10; } static{ z=10; } } 在上面的代码中,我在运行时初始化一个变量,但同样的
abstract class Abs{
final int x;
final int y;
final static int z;
public Abs(){
x=10
}
{
y=10;
}
static{
z=10;
}
}
在上面的代码中,我在运行时初始化一个变量,但同样的事情不适用于接口。为什么?接口顾名思义主要用于定义契约,而不是Java 8之前的实现,但您可以初始化字段 但是,您可以有一个嵌套类或枚举,该类或枚举包含任意数量的代码。接口 不要有构造函数或初始化块,因为您不能仅用实现的类创建接口的实例。所有变量都是公共静态final,所有方法都是公共的。方法可以具有带有默认关键字的默认实现 抽象类
这是一个普通类,但不能创建该类的实例。但是它们有任何变量、静态块和构造函数公共构造函数是无用的,因为只有嵌套类才能调用它,所以建议将所有构造函数标记为受保护的。接口不是类,它没有构造函数、变量或任何代码,只有方法签名,除了默认方法实现之外,因为Java 8.0接口还具有带有默认修饰符public static和final的变量。如果接口不是类,那么为什么编译后生成.class文件请参见允许初始化字段->允许初始化*静态*字段?接口没有实例字段,唯一允许的静态字段是常量。