接口
接口是功能的集合,接口只描述应该具备的方法而无具体实现方法。接口的具体实现是由接口的实现类完成的。
接口定义(interface)
public interface 接口名{
抽象方法1;
抽象方法2;
...
}
注意:
1. 接口中方法均为公共访问的抽象方法;
2. 接口中无法定义普通话成员变量;
接口实现类(implements)
接口实现类,实现接口功能的类,前提其是一个类(class);
定义格式:
class 类名 implements 接口名{
重写接口中的所有方法
}
在实现接口后,该类会将接口中所有的抽象方法继承过来,必须重写所有方法完成具体逻辑,否者将成为一个抽象类;
接口成员特点
- 接口中才可以定义变量,但是需要固定修饰符**< public static final >** 接口中的成员变量虽然也称之为变量,但是是固定无法改变的;
注意:- 修饰符可以省略不写也可以选择性写;
- 常量被静态修饰,可以用类名直接调用,被接口名直接调用;
public interface Demo{ public static final int x = 1; public abstract void func1(); } public static void main(String[] args){ System.out.println(Demo.x); }
- 接口中可以定义方法,但是需要固定修饰符**< public abstract >**;
- 接口与抽象类一致,无法创建对象;
- 实现类必须覆盖接口中所有的抽象方法后,才可以实例化。
public interface Demo{
public static final int x = 1;
public abstract void func1();
}
class InterfaceImpl implements Demo{
public static void func1(){
System.out.println("implements");
}
}```
## 接口的多实现
由于实现类需要重现接口中的方法,而方法的实现是依靠实现类实现的,所以并不会产生类多继承的错误;
注意:
* 应当避免多实现时,不同接口拥有相同函数名返回值类型不一样的函数,此时无法重写函数;
```java
public interface A{
public abstract void a();
}
public interface B{
public abstract int a();
}
// 接口多实现无法实现重写
public class InterfaceImple A,B{
public static void a(){
System.out.println("implements");
}
}
接口间的多继承
与类之间的继承相似,接口与接口之间也可以产生继承关系,多个接口之间可以使用(extends)进行jicheng
类继承类的同时实现接口
子类可以通过继承父类扩展功能,也可以通过接口的功能实现功能的拓展。
public interface A {
public abstract void a();
}
public interface B {
public abstract void b();
}
public abstract class C {
public abstract void c();
}
public class D extends C implements A, B{
public void a(){
}
public void b(){
}
public void c(){
}
}