Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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,为什么抽象类支持静态和实例块,而接口不支持?抽象类也支持构造函数,即使我们不能实例化抽象类 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文件请参见允许初始化字段->允许初始化*静态*字段?接口没有实例字段,唯一允许的静态字段是常量。