接口的基本概念
在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。
举个简单的例子我们日常生活中常见的电源插座,电脑usb接口这都是一种接口,而在使用的时候电源插座电脑usb接口只要符合它的使用标准就可以使用
即接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用
而在Java当中接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法
接口的特点和使用规则
我们在定义接口的时候将class关键字换成 interface 关键字,就定义了一个接口。
public interface 接口名称{
// 抽象方法
public abstract void method1(); // public abstract 是固定搭配,可以不写
public void method2();
abstract void method3();
void method4();
}
注意:
- 创建接口时, 接口的命名一般以大写字母 I 开头.
- 接口的命名一般使用 “形容词” 词性的单词.
- 阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性
public interface keyboard {
void input();
void click();
}
class computer implements keyboard{
@Override
public void input() {
System.out.println("输入数据!");
}
@Override
public void click() {
System.out.println("敲击键盘!");
}
}
class textone{
public static void main(String[] args) {
keyboard keyboard = new keyboard();
}
}
- 接口类型是一种引用类型,但是不能直接new接口的对象
- 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是public abstract,其他修饰符都会报错)
- . 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现
class computer implements keyboard{
@Override
void input() {
System.out.println("输入数据!");
}
@Override
void click() {
System.out.println("敲击键盘!");
}
}
- 重写接口中方法时,不能使用默认的访问权限
public interface keyboard {
int a=1;
String name="键盘";
void input();
void click();
}
class computer implements keyboard{
@Override
public void input() {
System.out.println("输入数据!");
}
@Override
public void click() {
System.out.println("敲击键盘!");
}
}
class textone{
public static void main(String[] args) {
keyboard keyboard = new computer();
keyboard.input();
System.out.println( keyboard.a);
}
}
- 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(接口中的变量必须赋值才能使用,在调用的时候通过类名.去调用)
- 接口中不能有静态代码块和构造方法
- 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class
- 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类
- jdk8中:接口中还可以包含default方法。
接口和抽象类的区别
核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中不能包含普通方法,子类必须重写所有的抽象方法
接口的使用
public interface keyboard {
void input();
void click();
}
interface moust {
void slide();
void affirm();
}
class computer implements moust,keyboard{
@Override
public void input() {
System.out.println("输入数据!");
}
@Override
public void click() {
System.out.println("敲击键盘!");
}
@Override
public void slide() {
System.out.println("滑动鼠标");
}
@Override
public void affirm() {
System.out.println("确认选择");
}
}
class textone{
public static void main(String[] args) {
moust moust=new computer();
keyboard keyboard=new computer();
moust.slide();
moust.affirm();
keyboard.input();
keyboard.click();
}
}
我们不能直接去实例化一个接口,因为接口中的方法都是抽象的,是没有方法体的,这样怎么可能产生具体的实例呢?但是,我们可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法
一个类可以实现不止一个接口
一个类如果要实现某个接口的话,那么它必须要实现这个接口中的所有方法
接口用来弥补类无法实现多继承的局限
接口间的继承
在Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承。即:用接口可以达到多继承的目的
public interface keyboard {
int a=1;
String name="键盘";
void input();
void click();
}
interface moust extends keyboard{
void slide();
void affirm();
}
class computer implements moust{
@Override
public void input() {
System.out.println("输入数据!");
}
@Override
public void click() {
System.out.println("敲击键盘!");
}
@Override
public void slide() {
System.out.println("滑动鼠标");
}
@Override
public void affirm() {
System.out.println("确认选择");
}
}
class textone{
public static void main(String[] args) {
moust moust=new computer();
moust.input();
moust.click();
moust.affirm();
moust.slide();
}
}
.一个接口可以继承于另一个接口,或者另一些接口,接口也可以继承,并且可以多继承
接口用来弥补类无法实现多继承的局限