距离上篇已通过了很久啦,主要是临近期末,忙着复习,接口方面也看了好多天,查看了不少资料,层次不齐,最终查看了官方文档对于interface
的介绍,才逐渐清晰一些。可是,毕竟是英文,看起来仍是相对有些费劲的,可是看完一整篇下来,产生了一种英文进步飞快的错觉哈哈哈哈。学习
话很少说,直接给一个形象生动的例子:spa
There are a number of situations in software engineering when it is important for disparate groups of programmers to agree to a "contract" that spells out how their software interacts. Each group should be able to write their code without any knowledge of how the other group's code is written. Generally speaking, interfaces are such contracts.code
大概的意思就是,开发的时候,每一个小组只需承认一份软件交互的“契约”,不须要关注其余小组的代码是怎么写的。咱们将要学习的接口,就是充当这个“契约”的角色。其实也挺好理解的,面向对象的口号不就是高内聚低耦合嘛,接口的出现很好地让规范和实现分离,从而大大下降了各组件的耦合,大大提升了可扩展性和可维护性。
再接着说,接口是一种规范,是其余组成部分都必须遵照的,是一组公共的方法,和咱们以前谈到的抽象类真的很像,它们达到的功能其实也差很少,二者差异咱们以后会详细分析。接下来应该会分许多个部分探究接口,敬请期待。对象
package com.my.pac19; //Output.java /** * @auther Summerday */ public interface Output { //常量: public static final int MAX_CACHE_LINE=50; int MAX_CACHE_LINE = 50; //普通方法: public abstract void out(); void out(); void getData(String msg); //默认方法: public default void print(String...msgs) default void print(String...msgs){ for(String msg:msgs){ System.out.println(msg); } } default void test(){ System.out.println("default test()"); } //静态方法:public static String staticTest() static String staticTest(){ return "the static method in interface"; } //!false:static String staticTest1(); }
使用interface
关键字表示接口,能够把接口看做是特殊的类,命名规范相似。并且,一个Java源文件中最多只能有一个public接口,且Java源文件名应该和public接口名相同。继承
[修饰符] interface [接口名] extends [父接口1],[父接口2] { //零到多个常量定义 //零到多个抽象方法定义 //零到多个默认方法和类方法定义 //零到多个内部类、接口、枚举定义 }
Java8以前并不容许默认方法和类方法的定义,增强以后就容许了。接口
接口中的成员(静态变量、方法等)默认都是public修饰的,因此加不加public没啥区别,但也只有这两种选择,由于毕竟规范就是须要让别人知道并遵循的。开发
接口中只能有静态变量,不能有实例变量,由于它不能建立对象,也就不能有实例。文档
//常量: public static final int MAX_CACHE_LINE=50; int MAX_CACHE_LINE = 50;
public static final
修饰的静态常量,因此这几个修饰词能够省略,如上。Java8以前,接口中只容许声明抽象方法,Java8以后作了加强,增长了对默认方法和类方法声明的容许。这里,暂且除那俩以外的称做普通方法,也就是抽象方法。get
//普通方法: public abstract void out(); void out(); void getData(String msg);
abstract
关键字了,上面提到接口中的成员都是public
修饰的,因此普通方法默认public abstract
,一样的,能够省略不写。做为Java8以后增长的默认方法,所谓存在即合理,它的出现必定解决了一些棘手的问题,可是目前我对此理解还不够透彻,在以后的学习中,慢慢理解,再作总结。咱们先了解它的定义格式:
//默认方法: public default void print(String...msgs) default void print(String...msgs){ for(String msg:msgs){ System.out.println(msg); } } //!false:default void test1(); //extension method should have a body
default
关键字修饰,而不是static
。一样的,他和默认方法都是新引进的宝贝,具体优势仍是以后再作分析。先看一手定义:
//静态方法:public static String staticTest() static String staticTest(){ return "the static method in interface"; } //!false:static String staticTest1();
static
关键字修饰,且不能被重写。接口.静态方法
的格式调用接口中的静态方法。