在接口中可以添加具体的方法
1.静态方法
实现该接口时,不论是抽象类还是普通类,都不允许重写改方法,在普通方法中的调用方式需要使用接口名.方法名
2.default方法
静态方法和default方法定义:
package intership.interfacetest; /** * @Author: yf.zuo * @Date: 13:13 2018/8/20 */ public interface InterfaceA { static void staticTest(){ System.out.println("staticA"); } default void test(){ System.out.println("A"); } void testA(); }
普通类实现该接口时,可以直接定义对象调用该接口的default方法,也可以重写(注释掉的部分),对于接口中没有方法体的函数,普通类在实现该接口时必须重写该方法(testA())
package intership.interfacetest; /** * @Author: yf.zuo * @Date: 13:16 2018/8/20 */ public class InterfaceTest implements InterfaceA{ // @Override // public void test(){ // System.out.println("InterfaceTest"); // } @Override public void testA() { } public static void main(String args[]){ new InterfaceTest().test(); InterfaceA.staticTest(); InterfaceB.staticTest(); } }
如果该普通类实现了两个接口,而这两个接口中又存在同名同参数的default方法,则该普通类必须重写这个方法,抽象类也需要重写,因为在调用的时候不知道调用哪个接口中的default方法。
package intership.interfacetest; /** * @Author: yf.zuo * @Date: 13:15 2018/8/20 */ public interface InterfaceB{ static void staticTest(){ System.out.println("staticB"); } default void test(){ System.out.println("B"); } }
package intership.interfacetest; /** * @Author: yf.zuo * @Date: 13:16 2018/8/20 */ public class InterfaceTest implements InterfaceA , InterfaceB{ @Override public void test(){ System.out.println("InterfaceTest"); } @Override public void testA() { } public static void main(String args[]){ new InterfaceTest().test(); InterfaceA.staticTest(); InterfaceB.staticTest(); } }