1

这是我第一次使用 java 接口,我很困惑。在线阅读教程后,我想到了如何定义接口并实现它,但小时、分钟和秒上有红色下划线。我不知道为什么会这样。

interface myClock {

    int hours;
    int minutes;
    int seconds;

    public void clock();
    public void clock(int x, int y, int z);
    public void setTime(int x, int y, int z);
    public void incTimeBySec();
    public void incTimeByMins(int x);
    public void display12hr();
    public void  display24hr();
}

class time implements myClock {

    public void clock() {
        hours   = 0;
        minutes = 0;
        seconds = 0;
    }

    public void clock(int x, int y, int z) {
        hours   = x;
        minutes = y;
        seconds = z;
    }

    public void setTime(int x, int y, int z) {
        hours = x;
        minutes = y;
        seconds = z;
    }

    public void incTimeBySec() {    
        if(seconds+1>60) {
            seconds = (seconds+1)-60;
            minutes++;
            hours++;
        } else {
            seconds+=1;
        }
    }
}
4

8 回答 8

7

接口只定义方法。没有数据成员,除了静态。

我建议您学习 Java 编码标准。您没有关注它们(例如,类和接口名称应大写。)

public interface MyClock {
    void setTime(int x, int y, int z);
    void incTimeBySec();
    void incTimeByMins(int x);
    void display12hr();
    void  display24hr();
}

我不建议你这样做,除非你只是想了解接口。JavaDate类比以往任何时候都更好地实现了所有这些方法。使用你可以使用的东西。

更新:由于 JDK 8 接口可以有默认实现

于 2013-09-08T17:15:05.900 回答
4

接口不能有状态!

于 2013-09-08T17:14:50.160 回答
2

实例变量,如hoursminutes这里seconds,是实现细节的一部分。接口只指定实现类应该有哪些方法,而不是它们应该如何实现。因此,您不能在接口中声明变量。static final但是允许使用声明的常量。

于 2013-09-08T17:18:00.967 回答
1

接口中定义的所有字段都是默认的public static final.

您收到编译时错误,因为您final在声明接口的字段时没有给它们赋值

于 2013-09-08T17:16:07.740 回答
1

接口中定义的所有变量都应该是public static final

public static final int hours = 0;
public static final  int minutes = 0;
public static final  int seconds  =0;

理想情况下,您只能声明常量

于 2013-09-08T17:16:12.143 回答
0

您不能在接口中声明实例变量。而是将它们移动到您的实现中。

于 2013-09-08T17:16:19.513 回答
0

错误:可能尚未初始化空白的最终字段小时解决方案不要将变量放入接口中。只有方法

public interface MyClock {
    void setTime(int x, int y, int z);
    void incTimeBySec();
    void incTimeByMins(int x);
    void display12hr();
    void  display24hr();
}
于 2013-09-08T17:19:00.800 回答
0

你没有初始化你的变量,当你声明第二个没有初始值时,你不能做像 second++ 这样的事情。

于 2013-09-08T17:21:02.983 回答