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);
}
}
此代码给出了编译时错误。我不知道这段代码有什么问题。
答案 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);
}
}