繁体   English   中英

关于接口的一般问题

[英]General question about interfaces

我知道,这是一个愚蠢的问题,但有人告诉我,我们可以在接口中编写代码,我的意思不是逻辑,而是 System.out.println(),在接口中。

这是真的??

不,在接口中你只声明方法(名称,参数)

接口可以只有公共抽象方法和公共 static 最终字段(常量)。 他们不能有:构造函数、static 块、块、非抽象方法、非公共方法、非 static 最终字段。 如果您没有为字段输入 public static final,或者为方法输入 public,编译器会为您添加它们。

接口是普通的合同。

你只能有public方法声明和publicstaticfinal fields 没有别的

这是一个代码示例,您可以在其中从界面中打印一些东西,但这是不好的做法,我知道没有用例,它只是 Java 令人费解:

public interface NewClass {

   HashMap x = new HashMap() {{
       System.err.println("print me");         
   }};

}

public class Test implements NewClass{

    public static void main(String[] args) {
        x.clear();
    }
}

(使用的类根本没有进一步的意义)

有一件事忘记了,一个接口可以有static类和接口,比如;

public interface MyInterface {
      public static class Holder {};
}

编辑

JLS 指出,

接口可能包含成员类型声明(第 8.5 节)。 接口中的成员类型声明隐式为 static 和公共。

这在接口中是不可能的。 您可以声明可实现的方法或最终的 static 常量。 但是定义常量并不是一个好习惯。

接口是纯粹的抽象 Class 它只有最终变量,只有抽象方法,它没有任何构造函数。 因此,在接口中,您只能添加仅是抽象方法和最终变量的方法声明。

是的你可以:

public interface DoStuff {
    public class Worker {
        public void work() {
            System.out.println("Hi there!");
        }
    }
}

import DoStuff.Worker;

public class Main {

    public static void main(String[] args) {
        Worker worker = new Worker();
        worker.work();
    }
}

如果您运行 Main 它将 output “您好!”

这是一个非常人为的例子,但在技术上是可行的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM