接口中不一定要是public abstract 抽象类方法
还可以是默认方法:public default
该默认方法可以实现接口的升级
例如:在一个被很多类继承的接口中在加 一个方法,如果加入抽象方法的话, 其他继承类都要对该方法实例化,所以可以用默认方法来解决该问题。另外默认方法也可以被覆盖重写
接口当中允许定义static方法 public static 返回值类型 方法名称(参数列表){}
但是不能通过接口实例化对象来实现接口当中的静态方法, 应该通过接口名称直 接调用静态方法 接口名称.静态方法(参数)
例如: MyInterface为接口名,one为类实例化对象)
one.methodStatic(); 错误
MyInterface.methodStatic(); 正确
在一个接口里还可以定义私有方法 --》 methodcommon()函数
普通私有方法:解决多个默认方法的代码重复问题
static静态私有方法:解决静态默认方法的代码重复问题
package day1;
public interface MyInterface {
public abstract void methodAbs();
public default void methodDefault(){
System.out.println("默认方法!");
/*System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
*/
methodcommon();
}
public default void methodDefault1(){
/* System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
*/
methodcommon();
}
private void methodcommon(){
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
}
public static void methodStatic(){
System.out.println("接口静态方法!");
}
}
package day1;
public class test implements MyInterface{
@Override
public void methodAbs() {
System.out.println("这是一个抽象类实例化!");
}
public static void main(String args[]){
test one=new test();
one.methodAbs();
one.methodDefault();
//one.methodStatic(); 错误调用
MyInterface.methodStatic();
}
}