接口代码给出了编译时错误

时间:2013-07-18 05:43:19

标签: java

interface I1 {
    int i = 10;
    void add();
    void sub();
    void del();
}
interface I2 {
    void disp();
}
class A implements I1,I2 {
    void add(){...}
    void sub(){...}
    void del(){...}
    void disp(){
        System.out.println(i);
    }
} 

此代码给出了编译时错误。我不知道这段代码有什么问题。

6 个答案:

答案 0 :(得分:9)

隐含地,I1.add()等是公开的。因此,在课堂上你也必须公开它们:

public void add(){...}
public void sub(){...}
public void del(){...}
public void disp(){
    System.out.printf(i);
}

否则你会得到

Cannot reduce the visibility of the inherited method from test.I1

此外,对printf()的调用需要更改为:

System.out.printf("%d", i);

(第一个参数是格式字符串。)

答案 1 :(得分:4)

无法缩小@NPE提及的可见度和

i默认为public static final,因此可以通过

访问它
I1.i

答案 2 :(得分:2)

界面中的所有方法都默认为public。

请参阅Java Language Specification 6.6.1说明哪些

All members of interfaces are implicitly public.

在覆盖方法时,您无法降低方法的可见性。你需要公开它们。

答案 3 :(得分:0)

你不能在不使用格式的情况下使用printf。

System.out.printf(“%i”,i);

很可能会允许你这样做,但没有格式,它可能并不总是有用。

答案 4 :(得分:0)

添加到Jigar Joshi答案,

Why are interface variables static and final by default?

如果您使用的JDK高于1.4,

您可以使用静态导入; e.g。

  import static packagename.I1.*;

http://javarevisited.blogspot.in/2012/10/what-is-static-import-in-java-5-example-tutorial.html

答案 5 :(得分:0)

您无法降低继承方法的可见性。在内部接口中,所有变量和方法都是默认的public

interface I1 {
    int i = 10;
    void add();
    void sub();
    void del();
}

interface I2 {
    void disp();
}

public class B implements I1,I2 {
    public void add(){}
    public void sub(){}
    public void del(){}
    public void disp(){
         System.out.println(i);
    }
}