目录
接口的概念
接口语法
接口的成员变量与方法
接口的使用
实现多个接口
接口的概念
在现实生活中,接口的例子比比皆是,比如:笔记本上的USB口,电源插座等...
电脑的USB口上,可以插:U盘、鼠标、键盘...所有符合USB协议的设备。
电源插座插孔上,可以插:电脑、电视机、电饭煲...
接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用!
那么在java中怎么定义接口呢?
在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。
接口语法
通过interface定义一个接口
interface IShape {}
接口的成员变量与方法
那么接口中的成员有哪些呢?
interface IShape {int a = 10;void draw();}
细心的小伙伴会发现-这个draw方法没有用abstract修饰为何能这样写呢?
这是因为你这样的话编译器会默认加上下面的东西:
interface IShape {public static final int a = 10;public abstract void draw();}
在编译器中我们也可以注意到这些是灰色的:
因此我们可以总结:
接口中的成员变量默认是 public static final修饰的
接口中的成员方法默认是 public abstract修饰的
接口当中不能有普通的方法(java8开始可以有default和static方法,可以有具体的实现)
interface IShape {public static final int a = 10;public abstract void draw();public static void test1() {}default void test2() {}
}
接口的使用
接口类型是一种引用类型,可以认为比抽象类还抽象,因此是不能new一个对象的。但是可以用关键词 implements 来实现接口。(要重写接口当中所有的抽象方法)
如下:
那么怎么调用呢?
接口通过向上转型和动态绑定
实现多个接口
在Java中,类和类之间是单继承的,一个类只能有一个父类,即Java中不支持多继承,但是一个类可以实现多个接口。
下面我们举个多接口例子:
我们先定义两个接口(跑,游泳),和一个抽象类(Animal)和一个Dog类
下面代码可以理解为:Dog是一个动物具有游泳和跑的特性
//接口1
public interface IRunning {void running();}//接口2
public interface ISwimming {void flying();
}//Animal类
public abstract class Animal {public String name;public int age;public Animal(String name, int age) {this.name = name;this.age = age;}public abstract void eat();
}//狗类继承Animal类实现ISwimming,IRunning接口
//可以理解为Dog是一个动物具有游泳和跑的功能
public class Dog extends Animal implements ISwimming,IRunning{public Dog(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("吃狗粮");}@Overridepublic void swimming() {System.out.println("游泳");}@Overridepublic void running() {System.out.println("跑");}
}
下面演示怎么调用,写一个Test类调用。
public class Test {public static void test1(Animal animal) {animal.eat();}public static void test2(IRunning iRunning) {iRunning.running();}public static void test3(ISwimming iSwimming) {iSwimming.swimming();}public static void main(String[] args) {Dog dog = new Dog("汪汪队队长",10);test1(dog);test2(dog);test3(dog);}}