1、什么是接口?
接口是一种对事物的公用特征进行的抽象,抽象出来的特征放在接口中进行描述,类似类,和类的区别是比类更特别,接口中的内容也有限制,不像类中可以有属性,方法,代码块等等。接口中的成员只能是全局变量、抽象方法、静态方法、默认方法。
接口比抽象类还特殊,抽象类其实也是一种特殊类。
抽象类不能被实例化,接口也是一样,不能够被实例化,其实从它的定义中就可以得知,接口中只能有抽象方法。
接口和类的最大的不同是一个类可以实现多个接口,而一个类不能继承多个类。
//A继承了父类B并实现了接口CC,DD,EE
class A extends B implements CC,DD,EE
接口与接口之间可以实现多继承。
interface AA{
}
interface BB{
}
interface CC extends AA, BB{
}
接口关键字:interface
类和子类之间是is a的关系,比如男人是人。
接口和类是并列的结构。即都是一种抽象。
接口的语法:使用关键字interface 修饰的。
接口中的成员:
可以定义全局变量和抽象方法(jdk1.7中)
jdk8中除了7中还可以定义静态方法、默认方法。
class InterfaceTest{
}
interface Flyable{
public static final int MAX_SPEED = 7900;
int MIN_SPEED = 1;//可以省略,默认也是和第一行一样的。在接口外面是也可以直接通过接口调用。
public abstract void fly();
void stop();//这里也可以省略
//接口中不能够定义构造器,那么也就是接口不能够实例化。
}
2、接口的作用
在定义类的时候根据需求进行实现一个接口或者多个接口,这样类就拥有了接口的特征。在实例化对象的时候,就可以用对象进行调用接口的特征。
3、接口的使用场景
一般都是通过类来实现接口,不会对接口进行实例化。
//如果类实现了接口中所有方法,那么就可以实例化对象。
如果类中没有全部实现了接口中的所有方法,那么类还是抽象类。
package com.netease;
public class Main {
public static void main(String[] args) {
// write your code here
Plane p = new Plane();
p.fly();
p.stop();
}
}
interface Flyable{
public static final int MAX_SPEED = 7900;
int MIN_SPEED = 1;//可以省略,默认也是和第一行一样的。在接口外面是也可以直接通过接口调用。
public abstract void fly();
void stop();//这里也可以省略
//接口中不能够定义构造器,那么也就是接口不能够实例化。
}
class Plane implements Flyable{
public void fly(){
System.out.println("飞机可以飞");
}
public void stop(){
System.out.println("飞机可以停");
}
}
打印结果:
飞机可以飞
飞机可以停
java类可以实现多个接口------》因为java的语法不支持多继承,也就是一个类只有有一个父类,那么为了解决多继承的问题,出现了接口,但是不是真正的继承,只是实现接口。
public class Main {
public static void main(String[] args) {
// write your code here
Plane p = new Plane();
p.fly();
p.stop();
p.att();
}
}
interface Flyable{
public static final int MAX_SPEED = 7900;
int MIN_SPEED = 1;//可以省略,默认也是和第一行一样的。在接口外面是也可以直接通过接口调用。
public abstract void fly();
void stop();//这里也可以省略
//接口中不能够定义构造器,那么也就是接口不能够实例化。
}
interface attrack{
public static final String AK = "serious";
public abstract void att();
}
class Plane implements Flyable,attrack{
@Override
public void fly(){
System.out.println("飞机可以飞");
}
@Override
public void stop(){
System.out.println("飞机可以停");
}
@Override
public void att(){
System.out.println("飞机可以袭击");
}
}
输出结果:
飞机可以飞
飞机可以停
飞机可以袭击