接口

java只允许单继承,若有一个类需要同时具备两个类的功能时,我们不能设置两个父类让该类同时继承,这时可以考虑使用接口进行实现

接口用法:

  1.使用interface来修饰

  2.接口中可以包含多个方法,且方法跟抽象类中的抽象方法一致,可以不写实现,子类在实现的时候必须要实现代码逻辑

  3.子类实现接口使用implements关键字若一个类既要继承父类又要实现接口,顺序为先继承后实现,即extends必须在implements前

特征:

  1.接口中的所有方法都是抽象方法,不能包含方法的实现

  2.接口中的所有方法的访问修饰权限都是public,不写并不是默认访问权限,而是public

  3.接口不能被实例化

  4.接口的子类必须要实现接口中的所有方法,而抽象类中的抽象方法必须被子类实现

  5.子类可以实现多个接口

  6.接口中的变量都是静态常量,如果变量没有使用static关键字修饰,它也表示静态常量,不用final关键字修饰也是常量 

  7.接口中的方法和常量无论是否加public修饰,默认的权限有且仅有一个,就是public 

  举例说明第6点:

  ①在编译接口时会帮我们自动添加static关键字

 1 public interface interfaces {
 2 
 3     int a = 100;
 4 
 5 }
 6 public class test {
 7     public static void main(String[] args) {
 8 
 9         System.out.println(interfaces.a);
10 
11     }
12 }
13 这里输出的结果为100,而我们注意到输出时是类名打点调用的常量a,说明a是类的常量,即在编译时会在a前加static关键字

  ②在编译接口时会帮我们自动添加final关键字

 1 public interface interfaces {
 2 
 3     int a = 100;
 4 
 5 }
 6 public class test {
 7     public static void main(String[] args) {
 8 
 9         interfaces.a = 200;
10 
11     }
12 }
13 这时报错:Cannot assign a value to final variable 'a'表明该常量值不可被修改,说明在编译接口时自动帮我们添加了final关键字

   ③在接口中定义变量必须初始化

1 public interface interfaces {
2 
3     int a ;
4 
5 }
6 这时会报错:Variable 'a' might not have been initialized必须进行初始化

接口的使用:

  1.接口代表一种能力,接口中可以定义N多个方法,子类在进行实现时,必须实现这些方法,将这些方法进行实现,就意味着具体了方法的能力

  2.接口是一种约定,主要体现在接口名称和注释上,例如接口中方法的名称、方法传递的参数个数、方法传递的参数类型等等

接口与抽象方法的区别:

  1.抽象类中的方法可以包含抽象方法也可以用普通方法,但是接口中只能包含抽象方法,所有的方法都是public  abstract的,不能有实现逻辑

  2.抽象类需要使用abstract关键字修饰,接口使用interface关键字修饰

  3.抽象类子类使用extends关键字来继承抽象类,使用implements来实现接口

  4.子类继承抽象类的时候必须要实现所有的抽象方法,普通方法可以不重写,而接口中的所有方法必须实现

  5.抽象类中可以定义成员变量,接口中只能定义静态常量

  6.抽象类在子类实现的时候是单继承,接口是多继承

  7.抽象类和接口都不能实例化,但是抽象类中可以有构造方法,接口中不能有构造方法

  8.抽象类中可以实现接口,并且不实现接口中方法,而接口只能继承接口,不能实现接口

注意:

  在实际的项目开发过程中,如果可以实现接口,尽量使用接口,将单继承的父类留在最关键的地方

 

posted @ 2020-03-15 11:00  showMeTheCodes  阅读(143)  评论(0)    收藏  举报