接口组成更新
接口的组成:常量,抽象方法
- Java8之前
- 常量:public static final
- 抽象方法:public abstract
- 默认方法(Java8)
- 静态方法(Java8)
- 私有方法(Java9)
接口中默认方法(Java8)
接口中默认方法的格式:
- 格式:public default 返回值类型 方法名(参数列表){}
- 定义一个接口,里面有两个抽象方法,以及一个默认方法:
public interface MyInterface {
void show1();
void show2();
//默认方法,有方法体
//public关键字可以省略
public default void show3(){
System.out.println("MyInterface show3");
}
}
- 定义接口的实现类,实现接口中的抽象方法:
public class MyInterfaceImpl1 implements MyInterface {
@Override
public void show1() {
System.out.println("1.show1");
}
@Override
public void show2() {
System.out.println("1.show2");
}
}
- 定义测试类:
public class MyInterfaceDemo {
public static void main(String[] args) {
//按照多态的方式创建对象并使用
MyInterface my = new MyInterfaceImpl1();
my.show1();
my.show2();
my.show3();
}
}
- 运行结果:
1.show1
1.show2
MyInterface show3
- 接口中的show3方法也能够在接口的实现类中重写:
public class MyInterfaceImpl1 implements MyInterface {
@Override
public void show1() {
System.out.println("1.show1");
}
@Override
public void show2() {
System.out.println("1.show2");
}
//重写接口中的默认方法show3
@Override
public void show3() {
System.out.println("1.show3");
}
}
- 运行测试类:
1.show1
1.show2
1.show3
接口中默认方法的注意事项:
- 接口中的默认方法不是抽象方法,不强制重写。但可以重写,重写时去掉关键字default
- 接口中的默认方法,public关键字可以省略,但default关键字不能省略
接口中静态方法(Java8)
接口中静态方法的格式:
- 格式:public static 返回值类型 方法名(参数列表){}
- 定义一个接口,里面有抽象方法,默认方法和静态方法:
public interface Inter {
//抽象方法
void show1();
//默认方法
default void show2(){
System.out.println("Inter show2");
}
//静态方法,public关键字可以省略,static关键字不能省略
public static void show3(){
System.out.println("Inter show3");
}
}
- 定义一个接口的实现类,并实现接口中的抽象方法:
public class InterImpl implements Inter{
@Override
public void show1() {
System.out.println("InterImpl show1");
}
}
- 定义测试类
public class InterDemo {
public static void main(String[] args) {
//多态的方式创建对象
Inter id = new InterImpl();
id.show1();
id.show2();
//接口中的静态方法,只能被接口调用
Inter.show3();
}
}
- 运行结果:
InterImpl show1
Inter show2
Inter show3
接口中静态方法的注意事项:
- 接口中静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
- 接口中静态方法的public关键字可以省略,static关键字不能省略
接口中私有方法(Java9)
接口中私有方法的格式:
- 格式1:private 返回值类型 方法名(参数列表){}
- 格式2:private static 返回值类型 方法名(参数列表){}
- 定义一个接口,里面有抽象方法,默认方法和静态方法:
public interface Interf {
//抽象方法
void show1();
//默认方法
default void show2(){
System.out.println("默认方法开始");
//默认方法可以调用非静态私有方法,也可以调用静态私有方法
show4();
show5();
System.out.println("默认方法结束");
}
//静态方法
static void show3(){
System.out.println("静态方法开始");
//静态方法只能调用静态私有方法
show5();
System.out.println("静态方法结束");
}
//私有方法1,非静态私有方法
private void show4(){
System.out.println("私有方法1");
}
//私有方法2,静态私有方法
private static void show5(){
System.out.println("私有方法2");
}
}
- 定义一个接口的实现类,并实现接口中的抽象方法:
public class InterfImpl implements Interf{
@Override
public void show1() {
System.out.println("InterfImpl show1");
}
}
- 定义测试类:
public class InterfDemo {
public static void main(String[] args) {
//多态方式创建对象
Interf i = new InterfImpl();
i.show1();
System.out.println("-------------");
i.show2();
System.out.println("-------------");
//接口名调用静态方法
Interf.show3();
}
}
- 运行结果:
InterfImpl show1
-------------
默认方法开始
私有方法1
私有方法2
默认方法结束
-------------
静态方法开始
私有方法2
静态方法结束
接口中私有方法的注意事项:
- 接口中的默认方法,可以调用非静态私有方法,也可以调用静态私有方法
- 静态方法只能调用私有的静态方法