接口组成更新概述
接口的组成
- 常量
public static final - 抽象方法
public abstract - 默认方法 (java 8)
- 抽象方法 (java 8)
- 私有方法 (java 9)
接口中默认方法
实现接口的升级
//定义一个接口 里面有两个抽象方法
public interface MyInterface{
void show1();
void show2();
}
//定义接口的两个实现类
//第一个
public class MyInterfaceImplOne implements MyInterface{
//重写抽象方法
@Override
public void show1(){
sout("One show1");
}
@Override
public void show2(){
sout("One show2");
}
}
//第二个
public class MyInterfaceImplTwo implements MyInterface{
//重写抽象方法
@Override
public void show1(){
sout("Two show1");
}
@Override
public void show2(){
sout("Two show2");
}
}
//定义测试类
//在主方法中,按照多态的方式创建对象并使用
MyInterface my = new MyInterfaceImplOne();
my.show1();
my.show2();
如果要升级接口,在接口中定义新的抽象方法,那接口的实现类就需要重写添加的这个方法,这样会很麻烦,于是做出如下改变,定义一个新的接口 让这个接口继承我们本来的接口,但是这样如果接口更新得比较快,就会生成很多子接口就会很复杂
//定义一个新的接口 让这个接口继承我们本来的接口
public interface MyInterfaceSon extends MyInterface{
void show3();
}
对上面出现的问题再进行进化,利用接口中默认方法
- 格式:public default 返回值类型 方法名(参数列表){ }
- 范例:public default void show3(){ }
//在上面那个接口中做出改变
//定义一个接口
public interface MyInterface{
void show1();
void show2();
public default void show3(){//其他类都不会报错 public可以省略
sout("show3");
}
}
在测试类中my.show3();一样可以使用,也可以在接口实现类中重写,会在控制台输出One show3
接口中静态方法
- 格式:public static 返回值类型 方法名(参数列表){ }
- 范例:public static void show(){ }
//定义一个接口 里面有三个方法,一个抽象方法,一个默认方法,一个静态方法
public interface Inter{
void show();
default void method(){
sout("Inter中的默认方法执行了");
}
public static void test(){//public可以省略
sout("Inter中的静态方法执行了");
}
}
//定义接口的一个实现类
public class InterImpl implements Inter{
//重写抽象方法
@Override
public void show(){
sout("show方法执行了");
}
}
//定义测试类
//在主方法中,按照多态的方式创建对象并使用
Inter i= new InterImpl();
i.show();//可以执行
i.method();//可以执行
i.test();//报错
InterImpl.test();//报错
//接口中的静态方法只能被接口调用
Inter.test();//可以执行
接口中私有方法
- 格式1:private 返回值类型 方法名(参数列表){ }
- 范例:private void show(){ }
- 格式2:private static 返回值类型 方法名(参数列表){ }
- 范例:private static void method(){ }
定义的接口的默认方法
定义的接口的静态方法
//定义接口的一个实现类
public class InterImpl implements Inter{
//没有抽象方法不需要重写
}
//定义测试类
//在主方法中,按照多态的方式创建对象并使用
Inter i= new InterImpl();
i.show1();//可以执行
i.show2();//可以执行
//接口中的静态方法只能被接口调用
Inter.method1();//可以执行
Inter.method2();//可以执行
//在接口中定义一个私有方法,把一样的部分提取出来
//下面面这个是非静态方法,只能调用默认方法(非静态),不能调用静态方法
private void show(){
//公共部分
}
//定义一个静态私有方法
private static void method(){
//公共部分
}
私有的静态方法无论是默认方法还是静态方法都可以调用,私有非静态方法只能默认方法(非静态)调用
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。