java8接口新特性:default、static
java8之前接口中的方法默认类型都是public abstract,也就是抽象方法,具体实现都交给实现类。而java8对接口功能做了增强,增加了default方法和static方法,也就是说从java8开始接口中的方法不再只能是抽象的,也可以有实现。
其应用也非常简单,如下面的例子所示,在接口中定义default和static方法:
public interface DefaultInterface {
// default方法
default void defaultFunction(){
System.out.println("this is a default function");
}
// static方法
static void staticFunction(){
System.out.println("this is a static funcion");
}
}
在实现类中可以直接调用接口的default方法,通过接口名.方法名调用static方法:
public class DefaultInterfaceImpl implements DefaultInterface{
public static void main(String[] args){
// 调用default方法
new DefaultInterfaceImpl().defaultFunction();
// 调用static方法
DefaultInterface.staticFunction();
}
}
运行结果如下:

注意点:
- 实现类可以重写default方法,不能重写static方法
- 如果一个类实现了两个接口,而这两个接口拥有相同方法签名(相同的方法名、参数)、返回类型的default方法时,实现类就必须重写该default方法,否则编译器会因为不知道应该调用哪一个接口中的default方法而报错。重写接口中default方法后,编译器会执行重写后的方法。不过好的编程习惯是明智的选择方法名,避免和其它接口产生冲突。
- 如果一个类同时继承了一个类和实现了一个或多个接口,而父类中拥有和接口中default方法相同的签名、返回值的方法时,当该类未重写该方法,直接调用时,将会调用父类中的方法。
新特性带来的好处:
- 增加default方法,可以在不破坏java现有实现架构的情况下能往接口里增加新方法。
尽管如此,还是不推荐过度使用,如果你大量使用default方法在你的应用接口中,你将很快意识到他没有真正精简代码。因为你不能在接口中提炼default里重复的代码到一个新的普通方法,这与以精简代码为目的的default关键字相冲突。不过这个问题在java9中通过在接口中支持private interface methods得到解决。不过一般公司项目在jdk版本的使用上并不会太激进。
具体参考链接:https://www.cnblogs.com/wanshiming/p/9011879.html - 而static方法除了调用比较方便外还有一个有趣的意义,程序入口main方法也是static,现在在接口也可以运行了。
接口和抽象类:
如此看来接口是不是和类越来越接近了?那么回归到一道基础的面试题:现在接口和抽象类有什么区别呢?
- 一个类只能继承一个抽象类,却可以实现多个接口。
- 虽然接口和抽象类都不能被实例化,但是抽象类可以有构造器,接口没有构造器。
- 抽象类中方法可以有public、protected、默认(包)甚至private范围的方法,接口只能有public范围的方法(即使是default也是public范围的,当然从java9开始接口也可以有private方法 。
java8接口新特性:default、static的更多相关文章
- Java8接口新特性
概述 Java 8中,你可以为接口添加静态方法和默认方法.从技术角度来说,这是完全合法的,只是它看起来违反了接口作为一个抽象定义的理念.猜想设计初衷可能使为了兼容8以下的jdk Java8出来了个函数 ...
- java8的新特性以及用法简介
1. 介绍 2 接口的默认方法 2 lambda表达式 2.1 函数式接口 2.2 方法与构造函数引用 2.3 访问局部变量 2.4 访问对象字段与静态变量 3. 内建函数式接口 3.1 Predic ...
- Java8 Stream新特性详解及实战
Java8 Stream新特性详解及实战 背景介绍 在阅读Spring Boot源代码时,发现Java 8的新特性已经被广泛使用,如果再不学习Java8的新特性并灵活应用,你可能真的要out了.为此, ...
- 简单了解JAVA8的新特性
JAVA8新特性会颠覆整个JAVA程序员的编程习惯 甚至如果您坚守JAVA7之前的编程习惯,今后你看比较年轻的程序员写的JAVA代码都会无法理解 所以为了保证不脱钩,我觉得有必要学习JAVA8的新特性 ...
- Java8常用新特性实践
前言: 时下Oracle开速迭代的Java社区以即将推出Java10,但尴尬的是不少小中企业仍使用JDK7甚至JDK6开发. 从上面列出的JDK8特性中我们可以发现Java8的部分特性很明显的是从Sc ...
- Java 接口 新特性(Java8)
Java8新特性之接口增强 在Java7以及以前的版本中,接口里的方法都是抽象的,并且不存在静态方法,属性默认修饰符是public static final.所有方法的声明都是public [返回类型 ...
- java5、java6、java7、java8的新特性
Java5: 1.泛型 Generics: 引用泛型之后,允许指定集合里元素的类型,免去了强制类型转换,并且能在编译时刻进行类型检查的好处. Parameterized Type作为参数 ...
- Java8部分新特性的学习
Java8中的新特性 一.Lambda表达式 Lambda表达式可以理解为一种可传递的匿名函数:它没有名称,但又参数列表.函数主体.返回类型,可能还有一个可以抛出的异常列表. 匿名:和匿名类类似的,它 ...
- 深度分析:java8的新特性lambda和stream流,看完你学会了吗?
1. lambda表达式 1.1 什么是lambda 以java为例,可以对一个java变量赋一个值,比如int a = 1,而对于一个方法,一块代码也是赋予给一个变量的,对于这块代码,或者说被赋给变 ...
- Java8的新特性以及与C#的比较
函数式接口 VS 委托 在C中,可以使用函数指针来存储函数的入口,从而使得函数可以像变量一样赋值.传递和存储,使得函数的调用变得十分灵活,是实现函数回调的基础.然而函数指针不存在函数的签名信息,甚至可 ...
随机推荐
- flutter-构造方法给数组list默认空值
1 class NewstStyle extends StatelessWidget { 2 final List<DkCenterUpload> upload; 3 const News ...
- 原根学习笔记+BSGS复习笔记
学原根发现拔山盖世算法忘光了,干脆一块儿写了吧. \(BSGS\) 算法 \(BSGS\) 算法,又名拔山盖世算法.北上广深算法.他解决的问题如下: 求解最小的可行的 \(k\),满足 \(a^k\e ...
- 收集 Spring Boot 相关的学习资料
收集 Spring Boot 相关的学习资料,Spring Cloud点这里 重点推荐:Spring Boot 中文索引 推荐博客 纯洁的微笑-Spring Boot系列文章 林祥纤-从零开始学Spr ...
- 从汇编层解读Golang的闭包实现:逃逸分析与性能影响
本文精心梳理了一系列面试中具有一定难度的高频Golang问题,其中部分知识点可能你之前未曾深入探究,然而它们却在面试和实际工作中至关重要. 包括:Golang的基础语法.并发模型.内存管理等核心知识点 ...
- Windows 提权-SeBackupPrivilege 特权
本文通过 Google 翻译 Sebackupprivilege – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注 ...
- 使用DeepSeek-R1分析电影票房
最近在学习DeepSeek-R1本地化部署的相关知识,看到了1个比较有意思的视频. 在该视频中,其主要逻辑就是当用户上传1个Excel后,之后就可以通过交互式的方式对这个Excel中的数据进行分析.但 ...
- LCP 11. 期望个数统计
地址:https://leetcode-cn.com/problems/qi-wang-ge-shu-tong-ji/ <?php /** 某互联网公司一年一度的春招开始了,一共有 n 名面试者 ...
- 在php类中使用函数
好久没更新了,今天复习歪麦编写php框架的文章,看到几个函数,在类中使用时,当参数需要调用类的方法时,都用数组的方式传参. 1. spl_autoload_register(array($this, ...
- EAR_v3 《浮声三》 智能化图书管理系统
EAR_v3 <浮声三> 搭建于 Actix_Web 框架下的智能化图书管理系统 本项目的前身是 <Rusty_Borders 危墙> 的 在线控制系统 部分,经过大量开发工作 ...
- Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
引言:AI技术新纪元的破局者 2025年3月6日凌晨,武汉Monica团队正式发布全球首款通用AI代理系统Manus,该工具在GitHub开源社区引发热议,单日Star数突破5万.与传统对话式AI不同 ...