抽象类是从多个类中抽象出来的模板,如果将这种抽象进行得更加彻底,则可以提炼出一种更加特殊的"抽象类"-接口(interface),Java9对接口进行了改进,允许在接口中定义默认方法和类方法,默认方法和类方法都可以提供方法实现,Java9为接口增加了一种私有方法,私有方法也可提供方法实现

  接口是从多个相似类中抽象出来的规范,接口不提供任何实现,接口体现的是规范和实现分离的设计哲学.

  接口定义的是多个类共同的公共行为规范,这些行为是与外部交流的通道,这就意味着接口里通常是定义一组公用方法.

接口的基本语法,使用关键字interface

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

  {

  零个到多个常量定义...

  零个到多个抽象方法...

  零个到多个内部类,接口,枚举...

  零个到多个私有方法,默认方法或者类方法定义...

  }

  语法详细定义:

    1.修饰符可以是public或者省略,如果省略了public访问控制符,则默认采用包权限访问控制符,也就是只有在相同包结构下才可以访问该接口

    2.接口名应与类名采用相同的命名规则,即如果仅从语法角度看,接口名只要符合标识符规则即可;如果从Java可读性来说,则接口名应由多个有意义的单词连缀而成,单词首字母大写.

    3.一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类.

  只有在Java8及以上版本中才允许在接口中定义默认方法,类方法,关于内部类,内部接口,内部枚举,稍后介绍.

  接口定义的是一种规范,因此,接口里面不能包含构造器和初始化块.

  接口内部的成员:

    1.成员变量(只能是静态常量,默认使用修饰符 public static final修饰,没有构造器和初始化块,故接口中定义的成员变量只能在定义时指定默认值)

    2.方法(只能是抽象方法,类方法,默认方法,私有方法,除开这几种,普通方法一律加public abstract来修饰,普通方法不能有方法体,但类方法,默认方法,私有方法都必须有方法实现(方法体))

    3.内部类(包括内部接口,枚举)定义

   接口里的常量,方法,内部类,内部枚举都是public访问权限,可以省略,如果要加,则必须为public.

  Java9为接口增加了一种新的私有方法,其实私有方法的主要作用就是作为工具方法,为接口总的默认方法或者类方法提供支持,私有方法拥有方法体,但不可以用default修饰,可以使用static修饰

代码示例:

  package com.j1803.interfaceTest;

public interface OutputTest {
    //接口里定义的成员变量只能是常量
    int MAX_CACHE_LINE=89;
    //接口里定义的普通方法只能是public的抽象方法
    void out();
    void getData(String msg);
    //接口中定义默认方法,需要使用default修饰
    default void print(String...msgs) {
        for(String msg:msgs) {
            System.out.println(msg);
        }
    }

default void print(String...msgs) {
        for(String msg:msgs) {
            System.out.println(msg);
        }
    }
    //接口中定义的类方法,需要使用static修饰
    static String staticTest() {
        return "接口里的类方法";
    }
    /*//定义私有方法
    private void footest() {
        System.out.println("fooltest私有方法");
    }
    //定义私有静态方法
    private static void foo() {
        System.out.println("foo私有静态方法");*/
    }
}

  JDK9支持私有方法.默认方法只支持default,即public default void print(String...msgs),不支持static修饰,需要接口实现类实例来调用.

最新文章

  1. Swift 必备开发库10个
  2. Ref 与 Out 的使用方法及区别
  3. Unity GameObject.activeSelf, GameObject.activeInHierarchy,GameObject.SetActive和SetActiveRecursively
  4. IIC 概述之源码仿真
  5. Windows系统下nodejs安装及配置
  6. xmind教程
  7. python 整数和浮点数
  8. Linux第六节随笔 输入输出重定向 、管道、通配符、wc / grep / tr / sort / cut / which /whereis /locate /find /
  9. 英语口语练习系列-C16-钱
  10. 海龟绘图turtle库之二级基础编程题
  11. 红迅JSAAS敏捷开发平台
  12. C# 鼠标移动Winform窗体内或者panel容器内的控件 显示虚线/实现虚线框来确定位置
  13. Linux服务器性能分析与调优
  14. ethtools命令详解
  15. ABS PBT POM材质键冒
  16. vc++ 在程序中运行另一个程序的方法
  17. webdings 和 wingdings 字体
  18. js登录弹出框插件
  19. September 16th 2017 Week 37th Saturday
  20. 用wamp5和ZendOptimizer搭建环境运行Discuz论坛

热门文章

  1. C++ 扩展 Op
  2. runtime系统的Cello
  3. Jmeter读取python生成的参数
  4. QByteArray使用方法大全
  5. Web 动画原则及技巧浅析
  6. 基于ABP落地领域驱动设计-01.全景图
  7. 『无为则无心』Python基础 — 9、Python字符串的编码与转义
  8. WEB安全漏洞扫描与处理(下)——安全报告分析和漏洞处理
  9. ClickHouse学习系列之七【系统命令介绍】
  10. 33、awk命令详解