1.Java 接口的访问权限
1 interface A{}//接口A包访问权限 2 3 public interface A{}//接口A公有访问 4 5 interface A{ 6 7 void function1(); 8 9 public void function2();//function1,function2 都是public的,即接口默认方法默认是public的,也必须是public的。 //另,接口中的域(成员变量)默认是static,final的 10 //也必须是这样的。 12 }
2.接口的类实现问题
1 public class B implements A{ 2 3 public void function1(){} 4 5 public void function2(){}//必须是public,因为Java编译器不允许在继承关系中访问权限降低。 6 7 //必须同时实现接口A中的全部方法,否则编译出错。这与抽象基类不同 8 9 //如果没有完全是实现抽象基类中的抽象方法,最多是不能创建对象。 10 11 }
3.接口与抽象基类的交叉问题(片面总结)
package JavaProject; interface A{ static void test1(){System.out.println("interface A");};//接口中的static方法,必须有函数体! void test2(); } public abstract class B implements A{ public static void test1(){System.out.println("class B");} public abstract void test2();//不需要实现的方法定义为抽象 public static void main(String[]args){ B.test1(); A.test1(); //new B();//error } }
4.导出类中,基类,接口方法的覆盖重载和实现
下面是 《Thinking in Java》Forth Edition P181 中的实例
package interfaces; interface I1{void f();} interface I2{void f(int i);} interface I3{int f();} class C{ public int f(){return 1;} } class C2 implements I1,I2{ public void f(){} public int f(int i){return 1;} } class C3 extends C implements I2{ public int f(int i){return 1;} } class C4 extends C implements I3{ //Identical. no problem: public int f(){return 1;} } //!class C5 extends C implements I1{} //!interface I4 extends I1,I3{}
去掉最后两行的注释编译出错,此例中覆盖,实现和重载搅在了一起,而且重载方法仅通过返回值类型是区分不开的
在打算组合的不同接口中使用相同的方法名通常会造成代码可读性的混乱,应尽量避免这种情况。
时间: 2024-10-14 08:08:55