zoukankan      html  css  js  c++  java
  • 五(十六)、接口

    接口的使用
      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 }
  • 相关阅读:
    windows程序中的数据绑定
    dbhelper
    数据库错题
    构建布局良好的windows程序
    初始windows程序
    asp.net 文件下载 解决文件名乱码
    asp.net 文件下载 文件名称乱码 处理~~
    ASP.NET上传文件并记录到数据库
    Jquery配合Asp.Net无刷新删除指定服务器上的文件!
    Frame、Iframe、Frameset 的区别
  • 原文地址:https://www.cnblogs.com/lixiuming521125/p/13504491.html
Copyright © 2011-2022 走看看