使用default和static定义接口方法

JDK1.8(jre8)以后,接口中不在仅仅只允许定义抽象方法,开始允许定义普通方法了;而普通方法需要用default声明。

interface IMessage {
public void print(); // 一个接口定义的抽象方法
default void fun() {// 接口中定义的普通方法
//
System.out.println("Hello,World!") ;
}
}
class MessageImpl implements IMessage {
public void print() {
System.out.println("Hello,World!") ;
}
}
public class TestDemo {
public static void main(String [] args) {
IMessage msg = new MessageImpl() ;
msg.fun() ;// 直接调用在接口类中定义的方法
}
}

上例代码中,使用defautl定义方法,defautl定义的方法是接口中的普通方法,可以被外部类通过接口类直接调用使用该普通方法。

interface IMessage {
public void print(); // 一个接口定义的抽象方法
default void fun() {// 接口中定义的普通方法
//
System.out.println("Hello,World!") ;
}
static void get() {
System.out.println("Hello,Woeld!") ;
}
}
class MessageImpl implements IMessage {
public void print() {
System.out.println("Hello,World!") ;
}
}
public class TestDemo {
public static void main(String [] args) {
IMessage msg = new MessageImpl() ;
msg.fun() ;// 直接调用在接口类中定义的方法
}
}

上例代码使用static方法定义,由此可以直接通过类调用方法,则不在实例化接口则可以调用。

~~~~~~~~

###

总结:

  接口中default或static方法定义是为了避免子类重复的实现同样的代码

  接口的使用还应以使用抽象方法为主

JDK1.8 —— 接口定义增强的更多相关文章

  1. JAVA8新特性——接口定义增强

    JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~ 接口定义增强 在JDK1.8以前,接口是定义的: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法 ...

  2. 菜鸡的Java笔记 第三十五 接口定义增强

    接口定义增强        在java从一开始到现在接口之中的核心组成部分:抽象方法与全局常量,但是随着技术的不断发展,用户在使用过程之中发现了有一些问题        如果说现在有一个接口经过了长年 ...

  3. Java 8新特性-2 接口定义增强

    为了解决当原有的接口中方法不足时,向原有的接口中添加新的方法,该接口下的N多实现类也需要重写该方法的问题!Java8引入了接口定义增强概念! Java8 打破了原有的接口的方法定义: 公共的.抽象的  ...

  4. java8接口定义增强

    java1.7之前,接口中只允许有全局常量和抽象方法,而1.8之后允许在接口中扩充default修饰的普通方法和static修饰的静态方法 其目的是在修改接口中方法的时候,子类就不必去一一修改 pac ...

  5. java接口定义的静态方法和默认如何在类实现的时候使用

    在 JDK1.8,允许我们给接口添加两种非抽象的方法实现: 1.默认方法,添加 default 修饰即可: 2.静态方法,使用 static 修饰:示例如下: 这样可以实现接口的增强,那我们在类实现接 ...

  6. java数据结构_附11_图的接口定义

    图的接口定义 Graph public class UnsupportedOperation extends RuntimeException {public UnsupportedOperation ...

  7. [Asp.net 5] Configuration-新一代的配置文件(接口定义与基础实现)

    关于配置文件的目录:[Asp.net 5] Configuration-新一代的配置文件 本系列文章讲的是asp.net 5(Asp.net VNext)中的配置文件部分,工程下载地址为:https: ...

  8. IOleItemContainer的接口定义

      IOleItemContainer的接口定义

  9. IBindCtx接口定义

    IBindCtx接口定义

随机推荐

  1. 如何用charles进行https抓包

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/138 如何用charles进行https抓包 晚上在家鼓捣 ...

  2. SmobilerService 开发者日志(一):什么是 SmobilerService ,它为开发者带来了什么价值?

    初见 SmobilerService 你会发现几个版本,以及一些价格. 所以,"Smobiler 是要收费了吗?" 这是开发团队在幕后悄悄观察 Service 推广开始后,用户向运 ...

  3. 【亲测有效】Ubuntu18.04 sudo apt update无法解析域名的解决方案

    问题描述如下: 拿起了封尘已久的ThinkPad,输入 sudo apt update 的时候,发现这个命令变得不好使了,具体出现的问题如下图所示: #( 09/08/19@ 2:44下午 )( py ...

  4. ctr预估论文梳理和个人理解

    问题描述 ctr的全称是click through rate,就是预估用户的点击率,可以用于推荐系统的ranking阶段.ctr预估可以理解为给用户的特征.item的特征以及context的特征(比如 ...

  5. win7个性化不能换界面:此页面上的一个或多个设置已被系统管理员禁用,关机里的切换用户和锁定为灰色

    win7个性化不能换界面:此页面上的一个或多个设置已被系统管理员禁用,关机里的切换用户和锁定为灰色 找到注册表 cmd-regedit HKEY_CURRENT_USER\Software\Micro ...

  6. web前端学习路线(干货)

  7. luoguP3181 [HAOI2016]找相同字符

    题意 考虑将\(s1\)和\(s2\)接在一起求出相同子串个数,再求出\(s1\)自己匹配的相同子串个数和\(s2\)自己匹配的相同子串个数减去即可. 如何求相同子串个数: 我们知道子串的集合即所有后 ...

  8. MySQL 行格式

    以 MySQL 默认的存储引擎 InnoDB 为例 InnoDB 包含以下四种行格式 Compact Redundant Dynamic Compressed 指定行格式 CREATE TABLE 表 ...

  9. SDOI2019退役记

    \(update:2019-8-15\) 这个坑占了四个月,不填上终归不太好,也不甘心.日子久了,记不太清了,您就当瞧个乐吧. \(Day \ 0\) 下午来到山师大领准考证,晚上一点前就睡了觉. \ ...

  10. Unity 2018 Cookbook (Matt Smith 著)

    1. Displaying Data with Core UI Elements (已看) 2. Responding to User Events for Interactive UIs (已看) ...