目录
1.6.1接口概述
1.6.1.1为什么引入接口
狗:吃,睡,游泳
青蛙:吃,睡,游泳
兔子,吃,睡
如果父类的动物定义吃,睡,游泳,兔子继承动物,就代表兔子也可以调用游泳,这个显然不对,因为兔子根本不能游泳。为了解决这类问题,引入了接口,可以理解:接口是一种行为(规则)
1.6.1.1接口定义
接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法(功能),包含抽象方法 (JDK7及以前) , 默认方法和静态方法(JDK8)私有方法(JDK9)。
1.6.2接口定义格式
接口用关键字interface修饰
public interface 接口名 {
}
1.6.3接口的使用
接口是不能创建对象,必须有实现类才能使用,类实现接口用implements表示
public class 类名 implements 接口名 {
}
注意: 接口的实现类必须重写接口中的所有的抽象方法,要么该类是一个抽象类
1.6.4接口成员的特点
1.6.4.1 成员变量
只能是常量,默认修饰符:public static final
1.6.4.2 成员方法
只能是抽象方法,默认修饰符:public abstract
1.6.4.3 构造方法
没有,因为接口主要是扩展功能的,而没有具体存在
1.6.5 抽象类
1.6.5.1 抽象方法与抽象类
抽象方法
-
将共性的行为(方法)抽取到父类之后,由于每一个子类的执行的内容时不一样,所以在父类中不能确定具体的方法体,该方法就可以定义为抽象方法
抽象类
-
如果一个类中存在抽象方法,那么该类就必须声明为抽象类
1.6.5.2 抽象类格式
格式
-
抽象方法格式:
Public abstract 返回值类型 方法名(参数列表)
-
抽象类定义格式:
Public abstract class 类名{}
// 先定义抽象类,里面有一个抽象方法
public abstract class Area{
// 定义抽象方法
abstract void area();
}
// A类继承抽象类
public class A extends Area{
@Override
void area() {
System.out.println("我是A");
}
}
}
注意事项
-
抽象类不能实例化
-
抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
-
可以有构造方法
-
抽象类的子类
-
要么重写抽象类中的所有的抽象方法
-
要么是抽象类(但是这个还是要创建一个子子类继承这个抽象子类)
-
1.6.6 类和接口的关系
-
类与类的关系
继承关系,只能单继承,但是可以多层继承
-
类与接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
-
接口与接口的关系
继承关系,可以单继承,也可以多继承
1.6.7 抽象类和接口的区别
-
成员区别
-
抽象类
变量,常量;有构造方法;有抽象方法,也有非抽象方法
-
接口
常量;抽象方法
-
-
关系区别
-
类与类
继承,单继承
-
类与接口
实现,可以单实现,也可以多实现
-
接口与接口
继承,单继承,多继承
-
-
设计理念区别
-
抽象类
为了继承而来,让子类强制重写父类中的抽象方法
-
接口
对行为抽象,主要是行为
-
1.6.8 JDK8开始接口新增的方法
JDK7以前:接口中只能定义抽象方法
JDK8新特性:接口中可以定义有方法体的方法(默认,静态)
JDK9新特性:接口可以定义私有方法
简单了解一下,后面会详细讲解。