java 接口

[public] interface 接口名{
    
}

规则

  1. 属性必须为公开静态常量(public static final)

    • 由于修饰符固定,所以可以省略或者缺失,编译器会自动填充

  2. 方法为公开抽象方法(public abstract)

  3. 不存在构造方法

  4. 不能被实例化对象

package com.by.dao;

public interface IA {
    public static final int A = 100;
    final int B = 200;
    int C = 300;

    public abstract void m1();
    public void m2();
    void m3();

}

public interface IB {
    public void ma();
}

实现类

[public] class 实现类名 implements 接口名{
    
}
一个实现类可以实现多个接口,一个接口也可以拥有多个实现类(**多实现**)
[public] class 实现类名 implements 接口名1,接口名2,..{
    
}

类可以同时继承父类和实现接口,**先继承后实现**
[public] class 类名 extends 父类类名 implements 接口名1,接口名2,..{
    
}

接口名仍然可以参与多态
接口名 引用名=new 实现类名();

接口参与多态时,仍然不可访问实现类独有内容

- 需要访问独有内容时,必须进行类型强转
  - 只能转向原本指向的实现类类型|实现类的其他引用类型
  - 同级实现类之间不可强转

//利用多态创建实现类对象
        IA ia = new IA_IB_Impl();
        ia.m1();
        ia.m2();
        ia.m3();
        /*ia.ma();
        ia.method(); 错误,编译失败*/
        //将ia引用类型强转为IB接口
        IB ib = (IB) ia;
        ib.ma();
        //将ia引用强转为实现类类型
        IA_IB_Impl ia_ib = (IA_IB_Impl) ia;
       // IAImpl iaimpl = (IAImpl) ia; 运行报错
      //  IAImpl iaImpl = (IAImpl) ia_ib; 编译报错
一个接口可以继承多个父接口(**多继承**)
[public] interface 子接口名 extends 父接口名1,父接口名2,..{
    
}

子接口可以继承拥有所有父接口中的内容
## 接口与抽象类的区别

|        | 抽象类                      | 接口         |
| ------ | --------------------------- | ------------ |
| 关键字 | abstract  class             | interface    |
| 属性   | 不做要求                    | 公开静态常量 |
| 方法   | 不做要求,可以存在非抽象方法 | 公开抽象方法 |
| 构造   | 有                          | 无           |
| 继承性 | 单继承                      | 多继承       |



## 接口高级

### 高版本的接口

#### JDK8.0

1. 默认方法

public default 返回值类型 方法名(形参列表){
    
}



静态方法
public static 返回值类型 方法名(形参列表){
    
}
可以通过`接口名.方法名(实参)`的方式直接调用


JDK9.0
私有方法
private 返回值类型 方法名(形参列表){
    
}











你可能感兴趣的:(java,开发语言)