接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。
接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。
请记住:一切事物均有功能,即一切事物均有接口。
接口的定义:
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...."); } }
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 但是省略了不代表没有!!编译器会自动添加!!