接口使用interface来定义
    Java中,接口和类是并列的两个结构

    如何定义接口:定义接口中的成员
    1. JDK7以前:只能定义全局常量和抽象方法
    全局常量:public static final的,书写时,可以省略
    抽象方法:public abstract的

    2. JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法(略)

    接口中不能定义构造器:接口不可以实例化

    1. Java开发中,接口通过让类去实现(implements)的方式来使用
    2. 如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化
    3. 如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类
    4. Java类可以实现多个接口 ——> 弥补了Java单继承性的局限性

    格式:class AA extends BB implements CC,DD,EE

    接口与接口之间可以继承,而且可以多继承

    接口的具体使用,体现多态性

    接口,实际上可以看做是一种规范

    开发中,体会面向接口编程

    1. package indi.cpc1270.java1;
    2. public class InterfaceTest {
    3. public static void main(String[] args) {
    4. System.out.println(Flyable.MAX_SPEED);
    5. System.out.println(Flyable.MIN_SPEED);
    6. Plane plane = new Plane();
    7. plane.fly();
    8. }
    9. }
    10. interface Flyable{
    11. //全局常量
    12. public static final int MAX_SPEED = 7900;
    13. public static final int MIN_SPEED = 1;
    14. //抽象方法
    15. public abstract void fly();
    16. void stop();
    17. }
    18. interface Attackable{
    19. void attack();
    20. }
    21. class Plane implements Flyable{
    22. @Override
    23. public void fly() {
    24. System.out.println("通过引擎起飞");
    25. }
    26. @Override
    27. public void stop() {
    28. System.out.println("驾驶员减速停止");
    29. }
    30. }
    31. abstract class Kite implements Flyable{
    32. @Override
    33. public void fly() {
    34. }
    35. }
    36. class Bullet implements Flyable,Attackable,CC{
    37. @Override
    38. public void attack() {
    39. // TODO Auto-generated method stub
    40. }
    41. @Override
    42. public void fly() {
    43. // TODO Auto-generated method stub
    44. }
    45. @Override
    46. public void stop() {
    47. // TODO Auto-generated method stub
    48. }
    49. @Override
    50. public void method1() {
    51. // TODO Auto-generated method stub
    52. }
    53. @Override
    54. public void method2() {
    55. // TODO Auto-generated method stub
    56. }
    57. }
    58. interface AA{
    59. void method1();
    60. }
    61. interface BB{
    62. void method2();
    63. }
    64. interface CC extends AA,BB{
    65. }
    1. package indi.cpc1270.java1;
    2. public class USBTest {
    3. public static void main(String[] args) {
    4. Computer com = new Computer();
    5. Flash flash = new Flash();
    6. com.transferData(flash);
    7. }
    8. }
    9. class Computer{
    10. public void transferData(USB usb) {
    11. usb.start();
    12. System.out.println("传输数据");
    13. usb.stop();
    14. }
    15. }
    16. interface USB{
    17. void start();
    18. void stop();
    19. }
    20. class Flash implements USB{
    21. @Override
    22. public void start() {
    23. System.out.println("U盘开启工作");
    24. }
    25. @Override
    26. public void stop() {
    27. System.out.println("U盘结束工作");
    28. }
    29. }
    30. class Printer implements USB{
    31. @Override
    32. public void start() {
    33. System.out.println("打印机开启工作");
    34. }
    35. @Override
    36. public void stop() {
    37. System.out.println("打印机结束工作");
    38. }
    39. }

    接口的应用:代理模式

    1. package indi.cpc1270.java1;
    2. public class NetWorkTest {
    3. public static void main(String[] args) {
    4. Server server = new Server();
    5. ProxyServer proxyServer = new ProxyServer(server);
    6. proxyServer.browse();
    7. }
    8. }
    9. interface NetWork{
    10. public void browse();
    11. }
    12. class Server implements NetWork{
    13. @Override
    14. public void browse() {
    15. System.out.println("真实的服务器访问网络");
    16. }
    17. }
    18. class ProxyServer implements NetWork{
    19. private NetWork work;
    20. public ProxyServer(NetWork work){
    21. this.work = work;
    22. }
    23. public void check() {
    24. System.out.println("联网之前的检查工作");
    25. }
    26. @Override
    27. public void browse() {
    28. check();
    29. System.out.println("代理服务器联网");
    30. work.browse();
    31. }
    32. }