接口概念与使用步骤
接口就是一种公共的规范标准
接口就是多个类的公共规范,接口是一种引用数据类型,最重要的内容就是其中的抽象方法
定义一个接口的格式:
public interface 接口名{
//接口内容
}
备注:换成关键字interface之后,编辑生成的字节码文件仍然是:.java->.class
在Java 7版本中,接口包含:
抽象方法,常量
在Java 8版本中,接口增加了:
默认方法,静态方法
在Java 9版本中,接口增加了:
私有方法
所以java中现在含有的接口内容一共有五个。
接口的使用步骤:
1.接口不能直接使用,需要有一个"实现类"来"实现"该接口.(类似于继承)
格式:public class 实现类名 implements 接口名{
}
2.接口的实现类必须覆盖重写(实现)接口中所有的抽象方法。
3.创建实现类的对象,进行使用
抽象方法的定义与使用
接口中的抽象方法定义格式:
public abstract 返回值类型 方法名(参数列表);
注意事项:
1.接口中的抽象方法,修饰符必须是两个固定的关键字:public abstract
2.这两个关键字可以省略不写,但是还是抽象方法。
3.方法的三要素可以随意定义。
4.么有方法体
抽象方法的使用步骤:
1.接口不能直接使用,需要有一个"实现类"来"实现"该接口.(类似于继承)
格式:public class 实现类名 implements 接口名{
}
2.接口的实现类必须覆盖重写(实现)接口中所有的抽象方法。
3.创建实现类的对象,进行使用
注意事项:如果实现类并没有把这个接口的方法全部重写会报错,除非他自己是抽象类
package demo;
public class Demo01Interface {
public static void main(String[] args) {
InterfaceAbstractImpl inter = new InterfaceAbstractImpl();
inter.method();
}
}
package demo;
public interface InterfaceAbstract {
public abstract void method();//抽象方法
}
package demo;
public class InterfaceAbstractImpl implements InterfaceAbstract {
@Override
public void method() {
System.out.println("方法执行啦!");
}
}
默认方法的定义和使用
java8 中的默认方法
格式:
public default 返回值类型 方法名称(参数列表){
方法体
}
备注:接口当中的默认方法,用来解决接口升级的问题。
1.接口的默认方法,可以通过接口实现类对象,直接调用
2.接口的默认方法,也可以被接口实现类进行覆盖重写
对于接口中写好的方法,想要给接口添加一些新的方法,不用改实现类,直接用默认方法在接口中写入
- 它自身具有方法体,所以可以直接在对象中使用
public class Demo02InterfaceDefault {
public static void main(String[] args) {
InterfaceDefaultImpl inter = new InterfaceDefaultImpl();
inter.method();
inter.method2();//可以在对象中直接调用
}
}
public interface InterfaceDefault {
public abstract void method();//定义了第一个抽象方法
public default void method2(){
System.out.println("新的默认方法执行啦");
}
}
package demo;
public class InterfaceDefaultImpl implements InterfaceDefault {
@Override
public void method(){
System.out.println("方法执行");
}
}
静态方法的定义与使用
从java8开始,接口中允许定义静态方法。
格式:
public static 返回值类型 方法名称(参数列表){
方法体
}
提示:就是将abstract或者default换成static即可,带上方法体。
静态方法使用:
- 注意事项:不能通过接口实现类的对象来调用接口中的静态方法
- 正确用法:通过接口名称,直接调用其中的静态方法。
- 格式:接口名.静态方法名(参数);
public class Demo03InterfaceStatic {
public static void main(String[] args) {
InterfaceStatic.method();//直接点静态方法
}
}
public interface InterfaceStatic {
//静态方法的定义
public static void method(){
System.out.println("静态方法执行");
}
}
package demo;
public class InterfaceStaticImpl implements InterfaceStatic{
}
私有方法的定义与使用
问题描述:
我们需要抽取一个共有方法,用来解决两个默认方法之间重复代码的问题
但是这个共有方法不应该让实现类使用。应该是私有化的
解决方案:
从java9开始,接口允许定义私有方法。
1.普通私有方法,解决多个默认方法之间重复代码问题
格式:private 返回值类型 方法名称(参数列表){
方法体
}
2.静态私有方法,解决多个静态方法之间重复代码问题
格式:
private static 返回值类型 方法名(参数列表){
方法体
}
私有方法只有接口自己可以调用
package demo;
public class Demo04InterfacePrivate {
public static void main(String[] args) {
InterfacePrivateImpl inter = new InterfacePrivateImpl();
inter.method1();
inter.method2();
}
}
package demo;
public interface InterfacePrivate {
public default void method1(){
System.out.println("默认方法启动");
methodPrivate();
}
public default void method2(){
System.out.println("默认方法启动");
methodPrivate();
}
private void methodPrivate(){
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
}
}
package demo;
public class InterfacePrivateImpl implements InterfacePrivate {
}
接口注意事项
1.接口是没有静态代码块和构造方法的
2.一个类的直接父类是唯一的,但是可以有多个接口
格式:public class MyClass extends Fu implement InterfaceA,InterfaceB(){
//覆盖重写所有抽象方法
}
3.如果实现类实现的多个接口中,有重复的抽象方法,只需要覆盖重写一次
4.如果实现类没有覆盖重写接口的所有抽象方法,那么实现类一定是个抽象类
5.如果实现类实现的多个接口中,有重复的默认方法,那么实现类一定对重复的方法进行重写。
6.一个类,如果直接父类当中的方法,与接口中的方法冲突,那么优先会使用父类的方法。
- 类与类之间是单继承的,直接父类只有一个
- 类与接口之间是多实现的,可以有多个接口
- 接口与接口之间是多继承的
注意事项:
1.如果多个父接口中有抽象方法重复,没关系。因为没有方法体。
2.如果多个父接口中有默认方法重复,有关系。子接口必须进行默认方法的重写。