1.接口组成更新概述
接口组成:
- 常量(public static final)
- 抽象方法(public abstract)可省去,没有方法体
- 默认方法(Java8 public default)
- 静态方法(Java8 public static)
- 私有方法(Java8)
2.默认方法
- 主要用于实现接口的升级而不破坏现有的代码
- 格式:public default 返回值类型方法名(参数列表){} //public可省去
- 默认方法允许有方法体
- 重写默认方法时,不可加default关键字
public interface MyInteface {
public static final int a = 1;
//抽象方法,public abstract 返回类型 函数名(参数表);无方法体 ,可省略如下
void show1();
void show2();
//默认方法,public default 返回类型 函数名(参数表){允许有方法体},可省public
// 继承的类可重写该方法,但不能加default
public default void show3(){
System.out.println("show3");//当不是所有继承都需要时,不写方法体
}
}
3.静态方法
- 主要用于****,只能被接口调用
- 格式:public static 返回值类型方法名(参数列表){} //可省public
- 注意:静态方法只能通过接口名调用,不可通过实现类名或对象名调用
public interface Flyable {
void fly1();
default void fly2(){
System.out.println("调用了默认方法中的fly");
}
static void fly3(){
System.out.println("调用了静态方法中的fly");
}
}
//调用
Flyable f = new Plane();
//调用fly1
f.fly1();//该方法已经被重写
f.fly2();
//调用接口的静态方法
Flyable.fly3();
3.私有方法
- 格式1:private 返回值类型 方法名(参数列表){}
- 格式2:private static 返回值类型 方法名(参数列表){}
public interface Eat {
//默认方法既可以调用非静态私有方法也可以调用静态的所有方法
default void eat1(){
System.out.println("eat1");
/* System.out.println("小狗吃骨头");
System.out.println("小猫吃鱼");
System.out.println("小兔子吃胡萝卜");*/
aeat();
}
default void eat2(){
System.out.println("eat2");
/*System.out.println("小狗吃骨头");
System.out.println("小猫吃鱼");
System.out.println("小兔子吃胡萝卜");*/
aeat();
}
//当存在重复时,我们可写一个私有方法调用
private void aeat(){
System.out.println("小狗吃骨头");
System.out.println("小猫吃鱼");
System.out.println("小兔子吃胡萝卜");
}
//静态方法只可以调用静态方法
static void eat3(){
System.out.println("eat3");
/* System.out.println("小狗吃骨头");
System.out.println("小猫吃鱼");
System.out.println("小兔子吃胡萝卜");*/
//不可调用aeat()
beat();
}
static void eat4(){
System.out.println("eat4");
/*System.out.println("小狗吃骨头");
System.out.println("小猫吃鱼");
System.out.println("小兔子吃胡萝卜");*/
beat();
}
private static void beat(){
System.out.println("小狗吃骨头");
System.out.println("小猫吃鱼");
System.out.println("小兔子吃胡萝卜");
}
}