接口
1.定义:使用interface来实现接口,可以将接口理解为一个纯粹的抽象类
java中一个接口可以继承多个接口。
public interface Animal extends InterFaceA,InterFaceB,InterFaceC{
}
public interface InterFaceA {
void run();
}
public interface InterFaceB {
void play();
}
public interface InterFaceC {
void happy();
}
2.接口中的成员变量默认为静态常量。
public static final int num = 10;
int count = 20;
3.jdk8以后接口中还可以定义默认方法,静态方法。
//jdk8以后还可以定义默认方法,静态方法
public default void eat(){
}
public static void test2(){
}
4.接口中定义抽象方法:
//接口中定义抽象方法
public abstract void sleep();
void test1();
5.类使用implements来实现接口:
在类声明中,Implements关键字放在class声明后面。
[访问修饰符] class 类名 implements 接口名1,接口名2……{ }
结合类的继承:
[访问修饰符] class 类名 extends 父类名 implements 接口名1,接口名2……{ }
一个类可以实现多个接口
public class Dog implements InterFaceA,Animal{
@Override
public void sleep(){
}
@Override
public void test1(){}
@Override
public void run() {
}
@Override
public void play() {
}
@Override
public void happy() {
}
}
一个类实现接口要么将此类定义为抽象类,要么重写里面所有的抽象方法
接口中的默认方法可以通过子类访问到
静态方法还是通过接口名访问
public class Test {
public static void main(String[] args){
Dog dog = new Dog();
//接口中的默认方法可以通过子类对象访问
dog.sleep();
dog.test1();
dog.eat();
//接口鲜红的静态方法还是通过接口名访问
Animal.test2();
int c = Animal.count;
int n = Animal.num;
Animal animal = new Dog();
animal.eat();
animal.sleep();
animal.test1();
}
}
java中一个类只能直接继承一个类,可以实现多个接口
public class Dog extends Animal1 implements InterFaceA,Animal{
@Override
public void sleep(){
}
@Override
public void test1(){}
@Override
public void run() {
}
@Override
public void play() {
}
@Override
public void happy() {
}
}
6.接口的特性:
- 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
- 接口中每一个方法也是隐式抽象的,默认为public abstract 。
- 接口中声明的属性默认为 public static final 的;
- 接口不是被类继承了,而是要被类实现。
- 接口不能实例化对象(无构造方法),但可以声明对象的引用。(多态性)
- 多个类可以实现同一个接口。
- 一个类可以实现多个接口,但只能继承一个类。
- 与继承关系类似,接口与实现类之间存在多态性。
- 一个接口能继承其它多个接口。
- 当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
7.接口和抽象类的比较
不同点:
- 抽象类中可以有构造方法,但是接口中不能有;
- 抽象类中可以有普通成员变量,但是接口中不能有普通成员变量;
- 抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型;
- 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义 静态常量;
相同点:
抽象类和接口都不能用来创建对象(实例化对象)。