//class C6 extends C implements I1{ public void f(){} } (b)
interface I4 extends I1, I3{} //(c)
class C7 implements I4{
publicvoid f() {}
publicint f() { return 1; }
}
(a)处代码会产生以下错误: method f() in class C cannot implement method f() in interface I1 with different return type, was void。 (b)处代码也是错误的: method f() in class C6 cannot override method f() in class C with different return type, was int。由(b)处代码也可看出,虽然你试图实现接口I1中的函数,但由于extends C在前,所以编译器会把C6中的函数看成是覆写class C中的函数,而不是象你想象中的作为实现接口中的函数的函数。 (c)处代码在原书中(P253)说会出错,但我在测试时并没发生错误。但当你试图通过C7来实现接口I4时,是无论如何也不可能编译通过的。 4) Java中唯一可以使用多重继承的地方 Java是不允许通过关键字extends来实现多重继承的,但除了通过多重继承来扩充接口除外。
interface I1{
void f1();
}
interface I2{
void f2();
}
interface Ie1 extends I2{
void fe1();
}
class Ce1 implements Ie1{
publicvoid f2() {}
publicvoid fe1() {}
}
interface Ie2 extends Ie1, I1{
void fe2();
}
class Ce2 implements Ie2{
publicvoid fe2() {}
publicvoid f2() {}
publicvoid fe1() {}
publicvoid f1() {}
}
接口Ie2继承了两个接口。 5. 嵌套的interfaces 嵌套的interfaces可以在定义该内部接口的外部类(接口)之外被使用(但内隐类不行)。 1) 当接口嵌套于class中 a) 不论接口为public、friendly或private,都可被实现为public、friendly、private三种嵌套类。 b) 被声明为private的接口不能在class外被使用。