接口

接口

 描述

  接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。

  接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。

  请记住:一切事物均有功能,即一切事物均有接口。

  接口它也是一种引用类型(和类,数组一样)

  是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法

  包含抽象方法(JDK 7及以前),

  默认方法和静态方法(JDK 8),

  私有方法(JDK 9)。

接口的定义:

public interface 接口名{
  //抽象方法
  //默认方法
  //静态方法
}

/**
 * 接口的定义格式
 */
public interface MyInterface {
    //抽象方法
    public abstract void abs1();
    public abstract void abs2();
    //默认方法
    public default void d1(){
        System.out.println("d1....");
    }
    public default void d2(){
        System.out.println("d2....");
    }
    //静态方法
    public static void s1(){
        System.out.println("s1....");
    }
    public static void s2(){
        System.out.println("s2....");
    }
}

  它与定义类方式相似,但是使用 interface 关键字。它也会被编译成.class文件,但一定要明确它并不是类,而是另外一种引用数据类型。

  

接口的使用:

  它不能创建对象,但是可以被实现(implements ,类似于被继承)。一个实现接口的类(可以看做是接口的子类),需要实现接口中所有的抽象方法,创建该类对象,就可以调用方法了,否则它必须是一个抽象类。

public class 实现类 implements 接口名{
        
}
接口的多实现
Java中继承只能单继承,实现可以多实现
格式:
    public class 实现类 implements 接口1,接口2,...{
        //1.实现类必须所有接口中的所有抽象方法
            注意:如果有相同的抽象方法,实现类只需要重写一次
        //2.实现类可以选择器重写所有接口中的默认方法
            注意:如果有相同的默认方法,实现类必须重写一次
        //3.实现类可以写自己的静态方法,但是不叫重写
            注意:如果有相同的静态方法,实现类也不需要重写
    }
实现和继承的优先级问题
Java中允许继承和实现同时存在
格式:
    public class 子类/实现类 extends 父类 implements 接口1,接口2,...{
        //1.重写父类和所有接口中的所有抽象方法
        //注意:如果有抽象方法同名,实现类只需要重写一次
        //2.选择性重写父类中的正常方法和所有接口中默认方法
        //注意:如果父类中的正常方法和接口中默认方法相同了,不需要重写,
                //实现类对象调用该方法时,优先调用父类中这个方法
        //3.无论父类和接口中是否有静态方法,静态方法是否重名,实现类都不需要重写
    }
注意: 继承和实现同时存在时,继承的优先级高于实现!!
接口的多继承
a.类和类之间是继承关系,单继承!
b.类和接口之间是实现关系,多实现!
c.接口和接口之间继承关系,而且是多继承   
格式:
    public interface 子接口 extends 父接口1,父接口2,...{
        //子接口不需要重写任何东西
        //注意:除非出现两个相同的默认方法,那么子接口需要重写一次
    }
使用:
    public 实现类 implements 子接口{
        //此时实现类相当于同时实现了多个父接口
    }  
接口中其他成员特点
a.接口中没有变量,只有常量,且常量由三个修饰符修饰:public static final
b.接口中没有构造方法,也不能创建对象
c.没有静态代码块。   
接口中的抽象方法,可以省略 public abstract
接口中的常量,可以省略 public static final
但是省略了不代表没有!!编译器会自动添加!!    
原文地址:https://www.cnblogs.com/xiaozhang666/p/12966084.html