合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
>[success] # java -- 接口 1. 如果一个**抽象类**没有字段,**所有方法**全部都是**抽象方法**,此时就可以使用接口声明,因此可以说,接口就是一种比抽象类还抽象的类,体现在所有方法都为抽象方法 2. 定义接口的关键字是**interface** >[danger] ##### 接口特点 1. 里面变量只能是常量 2. 接口只能继承接口 3. 接口可以多继承 4. 不能有构造方法 5. 从**Java8**开始增加新特性,接口中允许出现**非抽象方法**和**静态方法**,但**非抽象方法**需要使用**default**关键字修饰,原因之前定义的抽象方法如果实现接口的类非抽象类需要将所有的抽象方法都重写,但并不是每一个抽象方法在继承的类都有用到因此**default** 修饰的方法可以不用被重写 6. 从**Java9**开始增加新特性,接口中允许**出现私有方法** >[danger] ##### 定义接口 ~~~ public interface ITest { public static final int num= 1; // 变量只能是常量 int num1 =2 ; // 缩写因为只能是常量因此定义常量 public static final 可以省略 public abstract int getNum(); // 定义抽象方法 int getNum1(); // 缩写 public default void show1(){} // java8 开始允许定义为default方法在继承时候不用重写 public static void show2(){} // java8 开始允许定义静态方法,接口不能被实现,静态方法调用不用被实现符合接口 private void show(){} // 从Java9开始允许接口中出现私有方法 // --------出现java 私有方法方法------------ // 当多个默认方法有共同的逻辑时候,想做提取例如,提取一个 show3方法实际这样 // show3 方法还会被其他方法重写但show3 仅仅是共同逻辑此时就可以使用java9特性 私有方法 public default void show3(){ // ....重复逻辑 } public default void show4(){ show3(); show(); // 更好 } public default void show5(){ show3(); show(); // 更好 } } ~~~ * 定义接口 ~~~ public interface ITest1 { } ~~~ * 接口多继承,只需要重写抽象方法 ~~~ public class Test implements ITest,ITest1{ @Override public int getNum() { return 0; } @Override public int getNum1() { return 0; } } ~~~ * 使用 ~~~ public class UseTest extends Test{ public static void main(String[] args) { // 使用多态向上转型 Test test= new UseTest(); // 使用多态向上转型 ITest test1 = new UseTest(); } } ~~~ * 如果抽象类实现接口可以不用将抽象方法都实现 ~~~ public abstract class ATest implements ITest{ } ~~~ * 接口只能继承接口 ~~~ public interface ITest1 extends ITest{ } ~~~ >[success] # 类和接口之间的关系 | 名称 | 关键字 | 关系 | | --- | --- |--- | | 类和类之间的关系 | 使用extends关键字表达继承关系 | 支持单继承 | |类和接口之间的关系 |使用implements关键字表达实现关系 |支持多实现| |接口和接口之间的关系| 使用extends关键字表达继承关系 | 支持多继承 | >[success] # 抽象类和接口的主要区别 1. 定义抽象类的关键字是abstract class,而定义接口的关键字是interface 2. 继承抽象类的关键字是extends,而实现接口的关键字是implements 3. 继承抽象类支持单继承,而实现接口支持多实现 4. 抽象类中可以有构造方法,而接口中不可以有构造方法 5. 抽象类中可以有成员变量,而接口中只可以有常量 6. 抽象类中可以有成员方法,而接口中只可以有抽象方法 7. 抽象类中增加方法时子类可以不用重写,而接口中增加方法时实现类需要重写(Java8以前的版本) 8. 从Java8开始增加新特性,接口中允许出现非抽象方法和静态方法,但非抽象方法需要使用default关键字修饰 9. 从Java9开始增加新特性,接口中允许出现私有方法