default关键字:在jdk8中引入,使接口也能定义方法实现,用了default之后,就必须定义实现
public interface TestDefault {
default void testDefault(){
System.out.print("hello ");
}
void normal();
class TestDefaultImpl implements TestDefault{
@Override
public void normal() {
System.out.print("word");
}
}
static void main(String[] args) {
TestDefault testDefault=new TestDefaultImpl();
testDefault.testDefault();
testDefault.normal();
}
}
输出:
hello word
当接口实现类重新实现之后,会覆盖接口中的实现:
public interface TestDefault {
default void testDefault() {
System.out.print("hello ");
}
void normal();
class TestDefaultImpl implements TestDefault {
@Override
public void testDefault() {
System.out.print("bye ");
}
@Override
public void normal() {
System.out.print("word");
}
}
static void main(String[] args) {
TestDefault testDefault = new TestDefaultImpl();
testDefault.testDefault();
testDefault.normal();
}
}
输出:
bye word
此外,static关键字,也可以在接口中定义静态方法的实现,接口的静态方法不能被接口实现类实现,静态方法在接口中必须有实现体(一般没必要这样做):
public interface TestDefault {
static void testDefault() {
System.out.print("hello ");
}
static void main(String[] args) {
TestDefault.testDefault();
}
}
输出:
hello