接口的使用,接口中方法的定义,接口继承

接口的定义

1.接口就是多个类的公共规范。

2.接口是一种引用数据类型。

3.如何定义一个接口:
public interface 接口名称{
接口内容
}
4.java 7中接口包含常量,抽象方法
java 8中额外包含默认方法,静态方法
java 9中额外包含私有方法。

接口使用的步骤

1.接口不能直接使用,如果要使用,必须有一个实现类来实现接口。
格式:
public class 实现类名 implements 接口名称{

}

2.接口的实现类必须重写接口中的所有方法。
实现:去掉abstract关键字,加上花括号补上函数体。

3.不能直接new一个接口的对象,要new一个实现类的对象进行使用。

4.如果实现类没有重写接口中所有的方法,漏一个或者没写,那么这个实现类自己必须是抽象类。

接口中抽象方法的定义

在任何版本的java中,接口都能定义抽象方法。
格式:
public abstract 返回值类型 方法名(参数列表);
注意:
1.接口中的抽象方法,修饰符必须是固定的两个关键字public abstract。

2.这两个关键字可以选择省略(可以写一个,也可以不写,也可以只写前不写后只写后不写前)。

3.方法的返回值类型,名称,参数列表可以随意定义。

接口中默认方法的定义

从java8开始,接口里允许定义默认方法。
格式:
public default 返回值类型 方法名(参数列表){
方法体
}
默认方法可以用来解决接口升级问题。(实现类重写了接口所有方法后,如果要在接口中新添加一个方法,则实现类报错(因为没有重写所有的方法))。

添加默认方法后,实现类代码不会报错,并可以通过实现类直接实现接口的默认方法或者重写接口的默认方法。

接口中静态方法的定义

从java8开始,接口中允许定义静态方法。
格式:
public static 返回值类型 方法名(参数列表){
方法体
}
调用静态方法可以直接 接口名.方法名 调用。
注意:不能通过接口实现类的对象来调用接口中的静态方法。

接口中私有方法的定义

从java 9开始,接口中允许定义私有方法。
这个方法不应该被实现类调用,应该只能被本接口内的方法调用,所以应该是私有化的。

1.普通私有方法,用来解决多个默认方法之间重复代码的问题。
格式:
private 返回值类型 方法名(参数列表){
方法体
}

2.静态私有方法,用来解决多个静态方法之间重复代码的问题。
格式:
private static 返回值类型 方法名(参数列表){
方法体
}

接口中常量的定义

接口中也可以定义成员变量,但是必须使用public static final三个修饰符修饰,从效果上看,这其实就是接口的常量(因为用了final修饰符)。
格式:
public static final 数据类型 常量名称 数据值;

注意:
1.三个修饰符可以省略,但是不写依然是public static final。

2.接口中的常量必须明确赋值,不能不赋值。

3.常量名建议完全大写,比如int NUM_OF_MY_CLASS = 12;。

总结

在java 9+版本中,接口的内容可以有:

1.成员变量其实是常量,格式:
[public] [static] [final] 数据类型 常量名称 = 数据值;
注意:
常量必须赋值,且赋值后不能改变。
常量名称要完全大写,用下划线分割。

2.接口中最重要的就是抽象方法,格式:
[public] [abstract] 返回值类型 方法名称(参数列表);
注意:
实现类必须重写接口里所有的抽象方法,除非实现类是抽象类。

3.从java 8开始,接口里允许定义默认方法,格式:
[public] default 返回值类型 方法名称(参数与列表){方法体}
注意:
默认方法也可以重写。

4.从java 8开始,接口里允许定义静态方法,格式:
[public] static 返回值类型 方法名称(参数列表){方法体}
注意:
应该通过接口名称调用,不能通过实现类对象调用接口的静态方法。

5.从java 9开始,接口里允许定义私有方法,格式:
普通私有方法:private 返回值类型 方法名称(参数列表){方法体}
静态私有方法:private static 返回值类型 方法名称(参数列表){方法体}
注意:
private方法只有接口自己才能调用,不能被实现类或其他类使用。

注意事项

类的继承父类和实现多个接口

1.接口中是不能有构造函数和静态代码块的。
例如:
public interface a{
static{
//错误写法
}
public a(){
//错误写法
}
}

2.一个类可以实现多个接口。但是要重写所有接口的所有抽象方法(抽象类除外)。
例如:实现类b实现了x,y两个接口,那么就要重写x y里所有的抽象方法。

3.如果x y两个接口里有重复的抽象方法,那么实现类b里只用重写一次该方法即可。

4.如果x y两个接口里有重复的默认方法,那么实现类b里必须要对有冲突的默认方法进行重写。(即方法体不同为冲突,冲突就要解决。)

5.如果x接口里的默认方法和b类的父类里的方法冲突,那么优先使用b类的父类中的方法。继承>接口实现

接口之间的多继承

1.类与类之间是单继承的,直接父类只有一个,但是接口与接口之间是多继承的,且一个类可以实现多个接口。
例如:
public class a extends b,c; //错误
public interface a extends b,c; //正确
public class a extends b implements c,d; //正确

2.多个父接口中的抽象方法如果重复,没关系的。
多个父接口中的默认方法如果重发,那么子接口必须重写,还要带着default关键字(因为还是接口里的默认方法)。

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值