目录
接口的概念
接口语法
接口的成员变量与方法
接口的使用
实现多个接口
接口的概念
在现实生活中,接口的例子比比皆是,比如:笔记本上的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);
}
}