1 接口
- 概念:
生活中的角度:接口就表示一类规则,想要使用这个接口就需要遵守接口中定义的规则
Java语言的角度:接口就是用来定义抽象方法的一个特殊类型 - 特点:
(1)定义一个接口,使用一个新的关键字:interface 类名
(2)接口和抽象方法的关系:
接口中只能定义抽象方法,不能定义非抽象方法
(3)接口不能实例化(不能创建对象)
(4)类和接口之间不是继承关系,而是实现关系:implements
类型实现一个接口之后,接口中定义的内容,类型也可以继承
(5)接口的实现类有两条分支:
如果一个类型实现接口之后,重写了接口中继承的所有抽象方法,那么这个类型就是一个普通类
如果一个类型实现一个接口之后,没有重写完接口中继承的所有抽象方法,那么这个类型只能定义为一个抽象类
(6)接口要使用,也需要先编译后运行
1.1 接口的成员特点
- 接口中不存在变量,只能存在常量
如果在接口中定义了一个变量,或者定义了一个常量,会默认在常量或者变量前加:
public static final
- 接口中只能定义抽象方法,不能定义非抽象方法
在接口中定义的抽象方法,可以将关键字abstract隐藏 - 接口中需要定义构造方法吗?
不需要。
接口中不能定义变量(属性),所以不需要对属性进行初始化,不需要定义构造方法
1.2 类与类、类与接口、接口与接口之间的关系
-
类与类之间:继承关系:extends
特点:支持单继承,支持多层继承 ,不支持多继承 -
类与接口之间:实现关系:implements
特点:可以单实现、可以多实现、不可以多层实现
一个类型不仅可以同时实现多个接口,还可以继承其他父类
格式:类型A extends 类型B implements 接口C{} -
接口和接口之间:继承关系 extends
特点:可以单继承、可以多继承、可以多层继承
1.3 接口和抽象类区别
- 相同点:可以定义抽象方法
- 不同点:
(1)抽象类中可以定义非抽象方法;接口不能定义非抽象方法
(2)抽象类中可以定义变量;接口中不能定义变量
(3)抽象类也需要定义构造方法;接口不需要定义构造方法
(4)抽象类本质是一个类型,其他类只能继承一个抽象类
接口本质是一个接口,其他类型可以实现多个接口 - 定义的方式:
如果类型中要定义每一个子类都共有的内容,一般定义为抽象类
如果类型中要定义实现类特有的方法,一般提取到接口中
猴子:姓名 性别 吃饭(吃香蕉) 睡觉 爬树
猫:姓名 性别 吃饭(吃鱼) 睡觉 爬树
狗:姓名 性别 吃饭(吃肉) 睡觉
抽取一个抽象父类:姓名 性别 吃饭(抽象) 睡觉
抽取一个接口:爬树
2 匿名内部类
- 概述:本质也是一个类型,只不过没有名字的定义
属于一个局部内部类 - 格式:
接口类型 接口引用 = new 接口名(){
接口抽象方法的重写;
}
代码
package demos_inner;
public class Demo {
public static void main(String[] args) {
//使用匿名内部类的方式,创建了一个接口的实现类对象
MyInter2 m2 = new MyInter2(){
public void play(){
System.out.println("玩游戏");
}
public void eat(){
System.out.println("吃饭");
}
};
m2.play();
//使用匿名内部类的方式,创建一个抽象类的子类对象
//名字没有单独定义,使用的是抽象父类的名字
//如果要使用匿名内部类,不能单独定义,必须和new一起使用,直接创建对象
ABC abc = new ABC(){
//对类中抽象方法的重写
public void show(){
System.out.println("抽象类的子类对象调用方法");
}
};
//编译看左边,运行看右边
abc.show();
}
}