1.1接口的概念
接口在java中其实是多个类的公共规范,是一种引用数据类型。
例如,电脑接口上的usb接口,鼠标,键盘,u盘都是符合这个接口的设备
1.2语法规则
public interface 接口名称{
// 抽象方法
(public abstract) void method1(); // public abstract 是固定搭配,可以不写
//public void method2();
//abstract void method3();
void method4();
// 注意:在接口中上述写法都是抽象方法。
}
1.3接口的使用
接口不能直接使用,需要有一个实现类来实现该接口,实现接口中所有的抽象方法,需要使用关键字implements,关键字表示类和接口之间是实现的关系
public class 类名称 implements 接口名称{
// ...
}
1.4接口的特性
1.接口的类是抽象的,无法被直接实例化,接口类型属于引用类型
2.接口中的每个方法默认指定被Public abstract修饰,不能使用其他限定符
3.接口中的无法在接口中实现,只能在实现的类中实现
4.在实现类中重写接口方法的时候不能使用default修饰方法,因为接口中的抽象方法被public修饰
5.接口中可以有变量,但是默认被final public static修饰,无法修改
public interface USB {
double num = 3.0; // 默认被:final public static修饰
}
public class TestUSB {
public static void main(String[] args) {
System.out.println(USB.num); // 可以直接通过接口名访问,说明是静态的
// 编译报错:Error:(12, 12) java: 无法为最终变量brand分配值
USB.brand = 2.0; // 说明brand具有final属性
}
}
6.接口中不能有静态代码块和构造方法
7.如果实现类中并没有实现接口的所有方法,那么这个实现类也必须设置成抽象类
8. 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class
9. jdk8中:接口中还可以包含default方法。
1.5实现多个接口
java 中,类只能继承自一个父类(java不支持多继承),但是可以实现多个接口
public class demo1 {
class Animal{
protected String name;
public Animal(String name) {
this.name = name;
}
}
interface Run{
void run();
}
interface Swim{
void swim();
}
class Cat extends Animal implements Run{
public Cat(String name) {
super(name);
}
@Override
public void run() {
System.out.println(this.name+"正在跑");
}
}
class Fish extends Animal implements Swim{
public Fish(String name) {
super(name);
}
@Override
public void swim() {
System.out.println(this.name+"正在游");
}
}
class Bigduck extends Animal implements Swim , Run{
public Bigduck(String name) {
super(name);
}
@Override
public void run() {
System.out.println(this.name+"在跑着");
}
@Override
public void swim() {
System.out.println(this.name+"在游着");
}
}
public void main1() {
Cat cat = new Cat("章章");
Fish fish = new Fish("峰峰");
Bigduck bigduck=new Bigduck("章峰");
}
1.6接口的继承
接口之间也可以实现继承,例如可以写一个接口来继承会跑的和会游泳的
interface Liangxi extends Swim , Run {
@Override
public default void run() {
}
@Override
public default void swim() {
}
}