目录
接口的概念
接口语法
接口的成员变量与方法
接口的使用
实现多个接口
接口的概念
在现实生活中,接口的例子比比皆是,比如:笔记本上的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); } @Override public void eat() { System.out.println("吃狗粮"); } @Override public void swimming() { System.out.println("游泳"); } @Override public 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); } }