java - 为什么接口(interface)中的变量没有出现在类实现中?

标签 java

为什么当我点击实现方法时,接口(interface)中列出的变量没有显示在类中?我看了一下,但没有看到我真正寻找的答案,或者该变量更像是一个属性吗?

类(class):

public class TestInterface implements myInterable {

    public TestInterface() {
    }

    public static void main(String[] args) {


    }

    @Override
    public void method1() {


    }

    @Override
    public void method2() {


    }
}

interface myInterable {
    public int score = 0;
    public void method1();
    public abstract void method2();
}

尝试了这段代码,但它不起作用。它几乎与列出的 Oracle 教程中的示例完全相同。

示例:

interface TimeClient {
    void setTime(int hour, int minute, int second);
    void setDate(int day, int month, int year);
    void setDateAndTime(int day, int month, int year, int hour, int minute, int second);
    void getLocalDateTime();

    public static String getZoneId (String zoneString) { <-- Tutorial example
        return "";
    }

    public default int getZonedDateTime(String zoneString) { <-- like the tutorial
        return 0;
    }
}

另一个例子:

Oracle 规定您不能创建接口(interface)的实例,但如果您的类实现了接口(interface),那么您可以通过创建对该类的新引用来创建接口(interface)的实例吗?你会这样看吗?这是通过使用接口(interface)创建类实例并将所有方法 stub 放入接口(interface)中的更好方法吗?然后,如果您添加新的接口(interface)方法,则不必因为一个原因而重写所有代码或两种新方法。

如果这是正确的,并且我想向我的应用程序添加一种新方法,如果我的变量使用这种类型的实例创建,我就不必遍历并重新编译每个类来添加一个新方法。

public class TestInterface implements myInterable,
                                      Runnable,
                                      MouseListener {
     //Code goes here
}

public myInterable uu = new TestInterface(); <--This is the interface class

示例不起作用。

如果我使用类变量名称创建接口(interface)实例,这是否可行。

public class TestInterface implements myInterable,
                                      Runnable,
                                      MouseListener {

    public  myInterable uu = new TestInterface();

    public TestInterface() {
    }

    public void method1() {
    }


    public void method2() {
    }


    public void run() {
        System.out.println("Runnable");
    }

    @Override
    public void mouseClicked(MouseEvent arg0) {
    }

    @Override
    public void mouseEntered(MouseEvent arg0) {
    }

    @Override
    public void mouseExited(MouseEvent arg0) {
    }

    @Override
    public void mousePressed(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseReleased(MouseEvent arg0) {
        // TODO Auto-generated method stub
    }

    public static void main(String[] args) {
        TestInterface b = new TestInterface();
        b.run();
        b.uu.run();
    }
}

interface myInterable {
    public int score = 0;
    public void method1();
    public abstract void method2();
    public abstract void run();
//     void method3() {
//      int index = 0;
//       for (index = 0; index < 10; index++) {
//       }
//  }
}

错误消息:

at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)

最佳答案

JLS states

Every field declaration in the body of an interface is implicitly public, static, and final. It is permitted to redundantly specify any or all of these modifiers for such fields.

因此,示例中的字段 score 不会被继承,因为它是静态

关于java - 为什么接口(interface)中的变量没有出现在类实现中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21247902/

相关文章:

java - 如何将 Cucumber 功能文件中的场景名称作为 Cucumber 步骤中的参数传递?

java - java中的正则表达式模式匹配

java - 在 JFrame 中排列多个面板时出错

java - 从 onPostExecute 和 doInBackground 返回 boolean 值

java - MVC模式,没有数据库,对象存放在哪里?

java - java.sql.ResultSet、CallableStatement、SQLInput 没有通用接口(interface)

java - Java中的线程概念

java - 如何使用 DOM 获取 ElementById?

java - 全局扫描仪可以工作一次,但在第二次运行时会变得有点毛茸茸的

Java - 显示最小化的 JFrame 窗口