1.接口默认方法因何创生?
接口的默认方法主要用于解决既有接口存在实现类的情况下的扩展接口需要所有实现类都重写该接口的扩展方法的问题。
2.什么是接口默认方法?
1.接口的默认方法用default修饰,并且可以有多个;
2.常规的接口方法是待实现的;
3.可以用静态修饰符修饰接口方法;
4.可以用抽象修饰符修饰接口方法;
5.static和default不能配合使用;
6.static和abstract不能配合使用;
7.default和abstract不能配合使用;
public interface TestInterface {
//常规待实现的接口方法
void test();
//抽象的接口方法
abstract void testAbstract();
//默认的接口方法
default void test(String str) {
System.out.println(str);
}
//默认的接口方法1
default void test1() {
}
//静态的接口方法
static void tesStatic(String str) {
System.out.println(str);
}
}
3.默认接口可以重写吗?
1.常规接口方法必须重写;
2.抽象的接口方法必须重写;
3.默认的接口方法可以重写也可以不重写;
4.静态的接口方法不能重写,也不能通过创建的接口实例调用,因为静态方法在静态方法区,只能通过接口类名去引用;
public class TestInterfaceImpl implements TestInterface {
//常规接口方法重写
@Override
public void test() {
System.out.println("这是常规方法");
}
//抽象的接口方法重写
@Override
public void testAbstract() {
System.out.println("这是抽象方法");
}
//默认方法1重写
@Override
public void test1() {
System.out.println("这是被重写的默认方法1");
}
public static void main(String[] args) {
TestInterface testInterface = new TestInterfaceImpl();
//重写的接口方法
testInterface.test();
//默认的接口方法
testInterface.test("这是默认方法");
//重写的接口抽象方法
testInterface.testAbstract();
//静态的接口方法
TestInterface.tesStatic("这是静态方法");
//重写的默认接口方法1
testInterface.test1();
}
}
结果:
这是常规方法
这是默认方法
这是抽象方法
这是静态方法
这是被重写的默认方法1