zoukankan      html  css  js  c++  java
  • 二、Java面向对象(16)_接口

    2018-05-07

     

    接口

    一、什么是接口?

     

    接口只定义了应当遵循的规范,却不关心这些类的内部数据和其功能的实现细节。

    从程序角度上说,接口只规定了类必须提供的方法,从而分离了规范和实现,增强了系统的可维护性和可拓展性。

     

    Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

    接口和实现类实现了真正的多态。

     

    多个抽象类的抽象是接口。

    在Java中最小的程序单元就是类,接口其实是一个特殊的类。

    Java中接口表示一种规范,用于定义一组抽象方法。

     

    接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

    接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

    除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

    接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。

    另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

    ------------------------------------------------------------------------------

     

    二、接口的定义和使用

     

    Interface关键字用来声明一个接口。

    接口的声明语法:

      [public] interface 接口名称 [extends 其他的类名] {

        // 声明变量  final, static 字段

         // 抽象方法

       }

     

    接口编译成功后和类一样,具有一份字节码文件。

     

    接口中存在的成员:

      1)接口中没有构造器。所以接口不能创建对象,即不能实例化。

      2)接口中定义的成员变量:实质是全局静态常量,默认使用public static final 来修饰。例:public static final string NAME = “龙17”;

      3)接口中定义的方法都是公共抽象的。一般我们不使用修饰符。例:public abtract void wolk();

      4)接口中定义的内部类都是公共静态内部类。默认使用public static 来修饰内部类。

    ------------------------------------------------------------------------------------------------------------------------------------------

     

    三、接口的特点和继承

     

      1.接口没有构造器,也不能显示定义构造器,不能实例化。

      2.接口只能继承接口,不能继承类,且接口支持多继承(类是单继承的)。

         [修饰符] interface 接口名 extends 接口1,接口2

      3.接口里的方法必须都定义成抽象的,默认修饰符是public abtract

      4.接口的字段必须是全局静态常量,默认修饰符是public static final

      5.接口的内部类必须是静态的,默认修饰符是public static

     

    接口和接口之间只能是继承关系。接口使用extends关键字实现继承。

    接口和实现类只能是实现关系(特殊的继承关系)。类使用implements关键字实现接口。

    -------------------------------------------------------------------------------------------------------------------

     

    四、接口的实现

     

    当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。

    此时我们得提供类,让类去实现接口同时重写接口中的方法,从而实现接口中所定义的方法。

    类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。

    实现一个接口的语法,可以使用这个公式(一个类可以实现多个接口继承,从而也弥补了类的单继承问题):

      [修饰符] class 类名称 [extends 父类名]  implements 接口1,接口2,...{ }

     

    接口和实现类只能是实现关系(特殊的继承关系)。类使用implements关键字实现接口。

    所以可以理解为:接口是实现类的父类,实现类是接口的子类

      接口 变量 = 创建实现类对象;//体现了多态思想

     

    注意:因为接口的方法都是公共抽象的,所以实现类重写接口方法的时候,必须使用public修饰。

    --------------------------------------------------------------------------------------------------------------------------------------------------------------

    五、接口和抽象类的区别

     

    相同点:

      1)都可以被继承,用于被其他类实现或继承。

      2)都不能实例化

      3)都可以定义抽象方法,其实现类/子类都必须覆盖这些抽象方法

    不同点:

      1)接口没有构造方法,抽象类有构造方法。

      2)抽象类可以包括普通方法和抽象方法,接口只能包含抽象方法(Java8之前)。

      3)一个类只能有一个直接父类(可能是抽象方法),接口是多继承的并且只支持一个类实现多接口。

      4)抽象类和接口中的成员变量、方法、内部类的默认访问权限都分别不一样。

    ------------------------------------------------------------------------

     

    六、面向接口编程

     

    多态的好处;

      把实现类的对象赋给接口类型变量,屏蔽了不同实现类之间的实现差异,从而可以做到通用编程。

     

    参考:http://www.runoob.com/java/java-interfaces.html

  • 相关阅读:
    2017ecjtu-summer training #4 CodeForces 731C
    HDU 1232 并查集
    2017ecjtu-summer training #3 POJ3264
    2017ecjtu-summer training #4 UESTC 30
    斑羚飞渡 贪心
    Codeforces Round #565 (Div. 3) D. Recover it!
    P3398 仓鼠找sugar lca
    P3146 [USACO16OPEN]248 dp
    P1955 [NOI2015]程序自动分析 离散化
    P2949 [USACO09OPEN]工作调度Work Scheduling 贪心
  • 原文地址:https://www.cnblogs.com/sunNoI/p/9001889.html
Copyright © 2011-2022 走看看