抽象类是从多个类中抽象出来的模板,如果将这种抽象进行得更加彻底,则可以提炼出一种更加特殊的"抽象类"-接口(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修饰,需要接口实现类实例来调用.

java面向对象程序设计(下)-接口的定义的更多相关文章

  1. java面向对象程序设计(下)-枚举类

    在某些情况下,一个类的对象是有限而且固定的,比如季节类,它只有4个对象;再比如行星类,目前只有8个对象,这些实例有限而且固定的类,在Java中被称为枚举类 JDK1.5新增了一个enum关键字,(它与 ...

  2. Java面向对象作业-用接口方式测试向下转型

    Java面向对象作业-用接口方式测试向下转型 根据视频的里实例 我们直接修改Test2测试方法: package com.java1234.chap03.sec13; public class Tes ...

  3. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  4. 20145208 实验二 Java面向对象程序设计

    20145208 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...

  5. 20145221 《Java程序设计》实验报告二:Java面向对象程序设计

    20145221 <Java程序设计>实验报告二:Java面向对象程序设计 实验要求 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  6. Java实验报告二:Java面向对象程序设计

    Java实验报告二:Java面向对象程序设计                                                                               ...

  7. 20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计

    20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 ...

  8. 2018-2019-2 20175217 实验二《Java面向对象程序设计》实验报告

    一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:吴一凡 学号:20175217 指导教师:娄嘉鹏 实验日期:2019年4月15日 实验时间:--- 实验序号:实验二 实验名称:Jav ...

  9. 20175221曾祥杰 实验二《Java面向对象程序设计》

    实验二<Java面向对象程序设计> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:曾祥杰 学号:20175221 指导教师:娄嘉鹏 实验日期:2019年4月17日 实验时间 ...

随机推荐

  1. pytorch生成对抗示例

    pytorch生成对抗示例 本文对ML(机器学习)模型的安全漏洞的认识,并将深入了解对抗性机器学习的热门话题.图像添加难以察觉的扰动会导致模型性能大不相同.通过图像分类器上的示例探讨该主题.使用第一种 ...

  2. ADAS处理器集成功能安全单片机MCU

    ADAS处理器集成功能安全单片机MCU ADAS processors integrate functional safety MCU 拉斯维加斯-德州仪器公司引进了ADAS和网关处理器TDA4VM和 ...

  3. 徒手用 Go 写个 Redis 服务器(Godis)

    作者:HDT3213 今天给大家带来的开源项目是 Godis:一个用 Go 语言实现的 Redis 服务器.支持: 5 种数据结构(string.list.hash.set.sortedset) 自动 ...

  4. 用Python爬取分析【某东618】畅销商品销量数据,带你看看大家都喜欢买什么!

    618购物节,辰哥准备分析一波购物节大家都喜欢买什么?本文以某东为例,Python爬取618活动的畅销商品数据,并进行数据清洗,最后以可视化的方式从不同角度去了解畅销商品中,名列前茅的商品是哪些?销售 ...

  5. 工作中,如何衡量一个人的 JavaScript 编码水平?

    1.立即执行函数 立即执行函数,即Immediately Invoked Function Expression (IIFE),正如它的名字,就是创建函数的同时立即执行.它没有绑定任何事件,也无需等待 ...

  6. 合宙模块LUA相关资料汇总

    1. 目录 1. 目录 [2. LUA二次开发](#2. LUA二次开发) 2.1 [新手教程](#2.1 新手教程) 2.2 [进阶教程](#2.2 进阶教程) 2.3 [LUA开发环境](#2.3 ...

  7. Oracle数据库delete删除普通堆表千万条记录

    Oracle数据库delete删除普通堆表千万条历史记录. 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失败的问题: 2.可能导致undo表空间过度使用,影响到其他用户正常操作. ...

  8. 关于win10 samba访问提示用户名和密码错误的原因

    排除掉linux上的配置错误,只需要做到以下两步就可以了: 1.win10系统运行secpol.msc 打开本地安全策略 2.安全策略->本地策略->安全选项 3.右侧找到 网络安全:LA ...

  9. Java知识复习(三)

    Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象.还是都不用. 在比较时先调用hashCode方法, ...

  10. Linux驱动中的EPROBE_DEFER是个啥

    ​Linux kernel 驱动中,有不少驱动会引用到 EPROBE_DEFER 这个错误号.比如下面这个例子,对 devm_gpiod_get 的返回值进行判断,如果有错误且错误号不是 -EPRBO ...