什么是接口
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念;类描述对象的属性和方法,接口则包含类要实现的方法;除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口的声明
声明接口的语法:
package abs;
// interface:接口
public interface Lock {
// 开锁、上锁
public abstract void lockup();
void lockdown(); // public abstract:可以省略
public default void su(){
System.out.println("hello");
}
// 接口-特殊的类(抽象类)
// 是一种规范,一种能力,里面所有的方法都是抽象方法
// jdk1.8开始允许出现一般方法,但要加default
}
使用接口
使用接口的步骤:
1、创建接口,声明方法
2、创建类,实现接口,实现接口中的方法
3、使用实现后的方法执行具体的操作
接口的特点
1、接口不能用于实例化对象,因为接口中的方法都是抽象的 – 特殊的抽象类
2、接口不能存在构造方法,不存在抽象构造方法,没有什么用
3、接口中所有的方法必须是抽象方法。默认为:public abstract
4、接口不能包含成员变量,除了 public static final 常量。
5、接口中允许出现静态方法,接口名字调用即可,静态方法是常量
6、接口和类之间不是继承关系,而是实现的关系。实现使用关键字:implements
7、接口可以存在继承关系,但是接口只能继承接口,继承只能用于同类型之间,如类和类,接口和接口,接口可以同时继承多个接口
8、一个类可以同时实现多个接口
9、一个类可以继承一个类的同时实现多个接口
接口和抽象类的区别?
1、抽象类使用关键字abstract class修饰,接口使用关键字interface;
2、抽象类使用关键字extends实现继承,接口使用implements来实现
3、抽象类中可以包含抽象方法和普通方法,接口中只能有抽象方法;1.8之后是允许有一般方法的
4、抽象类可以有构造方法,接口中不能有构造方法;
5、抽象类可以有成员变量,接口中只能有常量;
6、抽象类只能单继承,接口可以多继承;
7、抽象类里面的方法可以是public,protect,private,接口的方法只能是public;
面向接口编程
实现防盗门的功能:
1.防盗门是一个门
2.防盗门有一个锁
测试
package abs;
// 测试
public class Demol {
public static void main(String[] args) {
TheftproofDoor door = new TheftproofDoor();
door.closeDoor();
door.openDoor();
door.lockdown();
door.lockup();
// 效果:
// 向后拉,关门
// 向前推,开门
// 插入钥匙,向右转三圈上锁,拔出钥匙
// 插入钥匙,向左转三圈开锁,拔出钥匙
}
}
抽象类
package abs;
//abstract:抽象修饰符
public abstract class Door {
// 开门、关门的方法
public abstract void openDoor();
public abstract void closeDoor();
// 一个方法你不需要方法体的话
// 可以使用abstract关键字来修饰,表示的是抽象的意思
// abstract修饰的方法是抽象方法,特征是没有方法体
}
接口
package abs;
// interface:接口
public interface Lock {
// 开锁、上锁
public abstract void lockup();
void lockdown();
public default void su(){
System.out.println("hello");
}
// 接口-特殊的类(抽象类)
// 是一种规范,一种能力,里面所有的方法都是抽象方法
// public abstract:可以省略
// jdk1.8开始允许出现一般方法,但要加default
}
定义方法
package abs;
// 防盗门具有Door门和Lock锁的功能
public class TheftproofDoor extends Door implements Lock {
public void lockup() {
System.out.println("插入钥匙,向左转三圈开锁,拔出钥匙");
}
public void lockdown() {
System.out.println("插入钥匙,向右转三圈上锁,拔出钥匙");
}
public void openDoor() {
System.out.println("向前推,开门");
}
public void closeDoor() {
System.out.println("向后拉,关门");
}
}