一、接口说明
接口是为了弥补java中不能实现多继承而出现的,接口比抽象类更抽象。
接口没有构造方法,不能被new,没有对象,不是类概念,也没有成员变量啥的。
1.1、接口说明
1、定义接口使用interface实现
2、接口中所有的方法默认都是public abstract修饰的,也就是不可以加方法体,但是可以使用default
关键字修饰方法,那就可以加方法体
3、接口中所有的变量都是public static final修饰的,是常量需赋值,三个关键字可以省略。
4、接口中没有构造方法,构造方法用于创建对象(接口不能new对象)但是可以使用多态
5、类与类之间之间是继承关系(extends)接口与类之间是实现关系(implements)
6、实现接口的类要实现接口中的所有方法,如果不实现接口中的方法,那么该类是抽象类
7、接口可以被类多实现,接口跟接口是继承关系,并且接口之间支持多继承。
8、类既可以在继承类的同时也可以实现接口
9、与继承关系类似的,接口与实现类之间存在多态性
1.1.1、实例:
接口:
public interface Usb {
void service();
}
具体类:Computer
public class Computer {
Usb usb1;
Usb usb2;
Usb usb3;
public void run() {
System.out.println("电脑启动了");
if(usb1!=null) {
usb1.service();
}
if(usb2!=null) {
usb2.service();
}
if(usb3!=null) {
usb3.service();
}
}
}
具体使用的类:Mouse Earphone Feng
public class Mouse implements Usb{
@Override
public void service() {
// TODO Auto-generated method stub
System.out.println("鼠标可以正常使用");
}
}
public class Earphone implements Usb{
@Override
public void service() {
// TODO Auto-generated method stub
System.out.println("耳机可以正常使用");
}
}
public class Feng implements Usb{
@Override
public void service() {
// TODO Auto-generated method stub
System.out.println("风扇可以正常使用");
}
}
测试:
public static void main(String[] args) {
// TODO Auto-generated method stub
Computer computer=new Computer();
computer.usb1=new Mouse();
computer.usb2=new Earphone();
computer.usb3=new Feng();
computer.run();
}
结果:
电脑启动了
鼠标可以正常使用
耳机可以正常使用
风扇可以正常使用
1.2、接口意义:
1、简化abstract关键字
2、解决多继承问题:接口可以被类多实现
1.3、接口和抽象类的异同
1、接口中的方法默认都是抽象的,java8开始有默认方法(default):抽象类中可以有非抽象方法
2、接口中的变量都是final类型的,而抽象类中的不一定;
3、一个类可以实现多个接口,但是只能继承一个抽象类;
4、一个类要实现接口的所有方法,而不一定要实现抽象类的所有方法
5、抽象类是对类的抽象,是一种模板设计,接口是对行为的抽象,是一种行为规范。