Java接口在1.8之后发生了重大变化。所以谈Java接口特点可以分为1.8版本之前和1.8版本之后。

1.8版本之前的特点:

  • 接口里只能有静态全局常量和public修饰的抽象方法。
  • 为了代码简洁,在接口中方法可以不用public和abstract修饰,但是编译后的方法仍然是public abstract类型的方法。全局常量也可以用public static fianl修饰,同样编译后仍然为public static final类型。

下面代码演示了一个如何定义一个1.8版本之前的接口:

public interface IFlyable
{
String info = "静态常量";
void fly();
}

上面代码尽管没有用public static final修饰info,但编译后info为静态全局常量,外部不能修改值。同样fly()没有用public abstract修饰,但编译结果是public abstract类型。

下面是测试代码:

 package org.lyk.vo;

 import org.lyk.intefaces.*;

 public class Bird implements IFlyable
{
public void fly()
{
System.out.println("鸟儿在飞翔");
}
}
 package org.lyk.main;

 import org.lyk.intefaces.*;
import org.lyk.vo.*; public class Hello
{
public static void main(String[] args)
{
IFlyable flyAble = new Bird();
flyAble.fly();
System.out.println(IFlyable.info);
}
}

1.8 版本之后的特点:

  • 打破了1.8之前接口里只能有全局静态常量和public抽象方法的限制。允许接口中用default关键字修饰的实体方法出现(该方法在子类中可以被覆写)
  • 也允许在接口中定义public static 类型的实体函数,该静态由接口调用。
 package org.lyk.intefaces;

 public interface IFlyable
{
public static final String info = "静态常量";
public abstract void fly(); public static void showSomething()
{
System.out.println("这是Java1.8才支持的静态函数,该函数只能由接口调用");
} default void printSomething()
{
System.out.println("这是Java1.8才支持的default实体函数.该方法可以在子类中被覆写。");
}
}

测试代码:

 package org.lyk.vo;

 import org.lyk.intefaces.*;

 public class Bird implements IFlyable
{
public void fly()
{
System.out.println("鸟儿在飞翔");
} public void printSomething()
{
System.out.println("在子类中覆写接口方法");
}
}
 package org.lyk.main;

 import org.lyk.intefaces.*;
import org.lyk.vo.*; public class Hello
{
public static void main(String[] args)
{
IFlyable flyAble = new Bird();
flyAble.fly();
System.out.println(IFlyable.info); flyAble.printSomething();
IFlyable.showSomething();
}
}

后记: 我想,Java1.8之所以做出如此大的设计上的改变,应该是为了向.net学习,目的是支持流(stream)。因为Java一开始设计的时候没有考虑到stream这种场景出现,现在要在接口中增加功能,就必须打破原有限制。

Java中接口的特点的更多相关文章

  1. 转载 - java中接口的向上转型。和多态性

    发现一篇对接口总结很精简的文章 1.在java中接口就是一个完全抽象的类,跟抽象类一样不能产生对象,但是可以作为对象的引用,可以由其实现类向上转型,它就跟超类一样, 向上转型了,可以很好的利用接口,可 ...

  2. Java中接口和抽象类的比較

    Java中接口和抽象类的比較-2013年5月写的读书笔记摘要 1. 概述 接口(Interface)和抽象类(abstract class)是 Java 语言中支持抽象类的两种机制,是Java程序设计 ...

  3. 浅谈Java中接口与抽象类的异同

    浅谈Java中接口与抽象类的异同 抽象类和接口这两个概念困扰了我许久,在我看来,接口与抽象类真的十分相似.期间也曾找过许许多多的资料,参考了各路大神的见解,也只能是简简单单地在语法上懂得两者的区别.硬 ...

  4. 关于java中接口定义常量和类定义常量的区别

    /** * * @author YZJ * @Description java中定义常量的最佳方法 */ public final class Contants{ /** * @Description ...

  5. java中接口之间的继承

    最近在读一些源码的时候突然发现了一个很神奇的东西,它的原始形态是这样的: 在这行代码中,BlockingDeque.BlockingQueue和Deque是三个接口.刚发现这个问题时,我是十分吃惊的, ...

  6. JAVA中接口与抛出异常的相关知识

    1.接口概念:接口可以理解为一种特殊的类,由全局常量和公共的抽象方法所组成. 类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只 ...

  7. java中接口和继承的区别

    实际概念区别:区别1:不同的修饰符修饰(interface),(extends)区别2:在面向对象编程中可以有多继承!但是只支持接口的多继承,不支持'继承'的多继承哦而继承在java中具有单根性,子类 ...

  8. Java中 接口是如何实现多态的特性的

    Java中多态是个很难理解的概念,但同时又是非常重要的概念,Java三大特性(封装.继承.多态)之一,我们从字面上理解,就是一种类型的多种状态,一下通过卖小汽车的例子再次说明什么是多态,其中利用到了接 ...

  9. java中接口的定义

    使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下: [修饰符] interface 接口名 [ ...

  10. 浅谈java中接口与抽象类之间的异同

    刚学习java的时候,总觉得接口和抽象类很像,但又说不上具体有什么区别.今天静下来,翻翻书,查查资料,做个小结.首先举两个例子,看看interface和abstract class 在“外形”上有啥异 ...

随机推荐

  1. .net程序中http请求的超时配置

    请求时的超时 // // 摘要: // 获取或设置 System.Net.HttpWebRequest.GetResponse() 和 System.Net.HttpWebRequest.GetReq ...

  2. java的类继承(与c++对比)

    1. interface的引入 使用interface来定义某一类通用操作,而又不强制规定其实现,对于Java的流行真是太重要了. 以JDBC举例.在Java之前,C++与数据库建立连接,常用的一个技 ...

  3. Python(多线程threading模块)

    day27 参考:http://www.cnblogs.com/yuanchenqi/articles/5733873.html CPU像一本书,你不阅读的时候,你室友马上阅读,你准备阅读的时候,你室 ...

  4. 静态分析第三发 so文件分析(小黄人快跑)

    本文作者:i春秋作家——HAI_ 0×00 工具 1.IDA pro 2.Android Killer 0×01 环境 小黄人快跑 下载地址http://download.csdn.net/downl ...

  5. Concurrent包工具类使用

    一.读写锁 传统的同步锁就是独占式锁,当线程使用资源时候保持独占,无论读写.当人们发现请求队列(假设)中相邻请求为读-读的时候,阻塞是一种浪费资源的操作.比如公告板,所有路过的人(请求)都是读操作,并 ...

  6. 使用泛型SwingWorker与EDT事件分发线程保持通讯

    为什么要使用SwingWorker 在swing开发中,如果一个应用程序,执行一些任务,需要大量的时间来完成,比如下载一个大文件或执行一个复杂的数据库查询. 我们假设这些任务是由用户使用一个按钮触发的 ...

  7. Java的GC

    垃圾收集 在探究Jvm的过程中,有两个点特别需要关注,一是:内存的使用,分配策略,而这一点是在前一篇博客已经介绍过了. 二是:内存的回收.也就是这一篇博客所要探究的关键点. 内存回收需要关注的几个点: ...

  8. 【8】JMicro微服务-JMicro ZKUI

    ZKUI是一个开源项目,是一个查看,修改ZK数据非常方便的工具.JMicro基于ZK做服务治理,配置管理,因此使用ZKUI会提供非常大的方便. Github地址:https://github.com/ ...

  9. IQKeyboardManager 问题锦集

    Keep UINavigationBar at the top (Don't scroll with keyboard) (#21, #24) If you don't want to hide th ...

  10. Elasticsearch四种常见的相关度分数优化方法

    **1.boost方式 ** 简单粗暴,最常用. 需求:查询出title和content中包含java spark的document 方式1: GET /forum/article/_search { ...