1.接口:对规则的声明
java中接口体现的更多的是对行为的抽象
2.设计接口
接口格式:interface 接口名{ },里面只能用抽象方法。
实现类格式:class 类名 implements 接口名{ },里面可以重写所有方法,或(少用)者再将其变成抽象类。
//创建接口(制定规则)
interface Inter{
public abstract void point();
public abstract void walk();//接口内部使用抽象方法
}
//实现类(实现接口)implements
class InterImpl implements Inter{
public void point(){
System.out.println("point out");
}
public void walk(){
System.out.println("walk around");
}
//重写所有的抽象方法
}
//创建测试类,调用方法逻辑
public class Test{
public static void main(String[] args){
InterImpl a = new InterImpl();//创建实现类对象
a.point();
a.walk();
}
}
3.接口中的成员特点
(1)成员变量
只能定义常量,因为系统会默认加入三个关键字public,static,final(无顺序关系)
(2)成员方法
只能是抽象方法,系统会默认加入两个关键字 public,abstract
(3)构造方法
无
4.接口和类之间之间的关系
(1)类和类之间的关系:继承关系,只支持单继承,不支持多继承,但支持多层继承。
(2)类与接口之间的关系:实现关系,可以单实现,也可以多实现,甚至可以在继承一个类的同时,实现多个接口。
(3)接口与接口之间的关系:继承关系,可以单继承,也可以多继承
//接口的多实现
public class Test{
public static void main(String[] args){
}
}
//写出两个接口
interface X{
void point();
}
interface Y{
void point();
}
//实现两个接口
class XYImpl implements X,Y{
public void point(){
System.out.println("point out");
}
}
//继承的同时实现多个接口
public class Test{
public static void main(String[] args){
}
}
//写一个父类
class Fu{
public void point(){
System.out.println("point out");
}
//接口
interface X{
void point();
}
interface Y{
void point();
}
//继承,实现
class Zi extends Fu implements X,Y{
//通过继承,无需再重写方法
}
5.抽象类和接口的对比
成员变量 | 成员方法 | 构造方法 | 应用场景 | |
抽象类 | 可以定义常量,变量 | 具体方法,抽象方法 | 有 | 对事物做描述(对事物抽象) |
接口 | 只能定义常量 | 只能抽象方法 | 没有 | 制定规则,规范代码(对行为抽象) |
6.接口新特性
jdk8
(一)许定义非抽象方法
1.为了解决接口升级的问题,jdk8允许定义非抽象方法,称默认方法,但要default修饰
2.格式:public default 返回值类型 方法名(参数与列表){ }
public default void show(){ }
3.注意:public可省略,default不可省略。
默认方法,实现类可以重写,但是需要去掉default关键字。
如果实现了多个接口,多个接口中存在相同的默认方法,方法类必须重写默认方法。
(二)许定义静态方法
1.注意:public可省,static不可省略
接口中的静态方法,只允许接口名调用,不允许实现类通过对象名调用
jdk9
1.接口中可以定义私有方法。private修饰,但是不能用default修饰了
private void show(){}
----------------------------
private static void show(){}//可能其他的也是static,而只有静态可以访问静态