五(十六)、接口

接口的使用
  1.interface 来定义;
  2.Java中,接口和类是并列的两个结构
  3.如何定义接口:定义接口中的成员;
                  a.JDK1.7以前:只能定义全局常量和抽象方法;
                              全局常量:public static final //但是书写是,可以省略不写
                              抽象方法:public abstract
                  b.JDK1.8以后:除了全局常量和抽象方法之外,还可以定义静态方法和默认方法;
  4.结构中不能定义构造器;意味着接口不能实例化;
  5.java开发中,通过类来实现来使用 implements
                  如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化;
                  如果实现类没有覆盖了接口中的所有抽象方法,则此实现类任然是一个抽象类;
  6.Java类可以实现多个接口 --》 弥补了类的单继承性的局限性
      格式:class AA extends BB implements CC,DD,EE
  7.接口 和 接口之间 可以继承,可以多继承;
  8.接口的使用,体现了多态性;
  9.接口,实际上就看做一种规范;
 
  面试题,抽象类和接口有哪些异同?
  相同点:不能实例化,都可以包含抽象方法
  不同点:吧抽象类的定义和接口的定义、内部结构解释说明;

 1 public class Day15Inteface14 {
 2     public static void main(String[] args) {
 3         System.out.println(Flyable.MAX_SPEED);
 4         System.out.println(Flyable.MIN_SPEED);
 5         Plane p = new Plane();
 6         p.fly();
 7         Flyable.method();//java8知识点1.接口中定义的静态方法,只能通过接口来调
 8         p.method1();//java8知识点2.接口中的默认方法,是通过实现类来调用,如果实现类重写了默认方法,调用认识是重写以后的方法;
 9         p.method2();//java8知识点3.若子类(或实现类)继承的父类和实现的接口中声明了同名同参,那么默认调用的是父类中的同名同参数的方法;--》类优先原则;
10                     //java8知识点4.如果实现类实现了多个接口,而多个接口中定义了同名同参数的默认方法,那么实现类没有重写此方法的情况下报错,
11                     //解决方法,则实现类必须重写;
12     }
13 }
14 interface Flyable{
15     
16     //全局常量
17     public static final int MAX_SPEED = 7900;//第一宇宙速度
18     int MIN_SPEED = 1;//省略 public static final
19     
20     //抽象方法
21     public abstract void fly();
22     
23      void stop();//省略public abstract
24      
25      //静态方法
26      public static void method() {
27          System.out.println("我是静态方法");
28      }
29      //默认方法
30      public default void method1() {
31          System.out.println("我是默认方法");
32      }
33     
34      //可以省略public
35      default void method2() {
36          System.out.println("我是默认方法");
37      }
38 }
39 
40 class Plane implements Flyable{
41 
42     @Override
43     public void fly() {
44         // TODO Auto-generated method stub
45         System.out.println("通过引擎起飞");
46     }
47 
48     @Override
49     public void stop() {
50         // TODO Auto-generated method stub
51         System.out.println("驾驶员减速停止");
52     }
53     
54     public void myMethod() {
55         //java8知识点5.调用接口中的默认方法
56                 Flyable.super.method1();
57     }
58 }
59 abstract class Kite implements Flyable{
60     
61     @Override
62     public void fly() {
63         // TODO Auto-generated method stub
64         System.out.println("通过引擎起飞");
65     }
66     
67     
68 }
69 
70 interface Attacable{
71         
72 }
73 
74 class Bullet extends Object implements Flyable,Attacable{
75 
76     @Override
77     public void fly() {
78         // TODO Auto-generated method stub
79         
80     }
81 
82     @Override
83     public void stop() {
84         // TODO Auto-generated method stub
85         
86     }
87     
88 }
89 interface AA{
90     
91 }
92 interface BB{
93     
94 }
95 interface CC extends AA,BB{//接口之间的继承关系;
96     
97 }

 接口体现多态性的举例:这里的实现类可以看做是接口的子类

 1 public class Day15Interface16 {
 2     public static void main(String[] args) {
 3         Computer com = new Computer();
 4         //创建了接口的非匿名实现类的非匿名对象;
 5         Flash flash = new Flash();
 6         com.transferData(flash);//多态性的体现
 7         
 8         //创建了接口的非匿名实现类的匿名对象;
 9         com.transferData(new Printer());//多态性的体现
10         
11         //创建了接口的匿名实现类的非匿名对象;
12         USB phone = new USB() {
13 
14             @Override
15             public void start() {
16                 System.out.println("手机开始工作");
17             }
18 
19             @Override
20             public void stop() {
21                 System.out.println("手机结束工作");
22             }
23             
24         };
25         com.transferData(phone);
26         
27         //创建了接口的匿名实现类的匿名对象;
28         com.transferData(new USB() {
29 
30             @Override
31             public void start() {
32                 System.out.println("mp3开始工作");
33             }
34 
35             @Override
36             public void stop() {
37                 System.out.println("MP3结束工作");
38             }
39             
40         });
41     }
42 }
43 
44 interface USB{
45     //常量:长 宽 最大最小传输速度等
46     
47     void start();
48     
49     void stop();
50 }
51 
52 class Flash implements USB{
53 
54     @Override
55     public void start() {
56         System.out.println("U盘开启工作");
57     }
58 
59     @Override
60     public void stop() {
61         System.out.println("U盘结束工作");
62     }
63     
64 }
65 class Printer implements USB{
66     
67     @Override
68     public void start() {
69         System.out.println("打印机开启工作");
70     }
71     
72     @Override
73     public void stop() {
74         System.out.println("打印机结束工作");
75     }
76     
77 }
78 class Computer{
79     public void transferData(USB usb) {
80         usb.start();
81         System.out.println("**************");
82         usb.stop();
83     }
84 }
原文地址:https://www.cnblogs.com/lixiuming521125/p/13504491.html