当前位置: 首页 > 面试题库 >

Java中default关键字的目的是什么?

叶炜
2023-03-14
问题内容

Java中的接口类似于类,但是接口的主体只能包含 抽象方法final字段(常量)。

最近,我看到一个问题,看起来像这样

interface AnInterface {
    public default void myMethod() {
        System.out.println("D");
    }
}

根据接口定义, 允许 使用抽象方法 。为什么它允许我编译以上代码?default关键字是什么?

另一方面,当我尝试编写下面的代码时,它说 modifier default not allowed here

default class MyClass{

}

代替

class MyClass {

}

谁能告诉我default关键字的目的?只能在接口内部使用吗?与default(无访问修饰符)有什么区别?


问题答案:

这是Java 8中的一项新功能,可interface提供一个实现。在Java 8
JLS-13.5.6中描述。读取(部分)接口方法声明

添加default方法,或改变的方法,由abstractdefault,不破与预先存在的二进制兼容性,但可能会导致IncompatibleClassChangeError如果一个预先存在的二进制尝试调用的方法。如果限定类型,T是两个接口的子类型IJ,则会出现此错误,其中I和都J声明一个default具有相同签名和结果的方法,而另一个I也不J是另一个子接口。

JDK 8的新增功能说(部分)

默认方法允许将新功能添加到库的接口,并确保与为这些接口的较早版本编写的代码二进制兼容。



 类似资料:
  • 问题内容: Java中的原生关键字是什么? 问题答案: 述关键字被应用于方法,以指示该方法是在本机代码使用JNI(Java本地接口)来实现。

  • 问题内容: 在JavaScript中的关键字可能会相当混乱首次遇到它的时候,人们往往会认为JavaScript是不是面向对象的编程语言。 它是什么? 它解决什么问题? 什么时候合适,什么时候不合适? 问题答案: 它做五件事: 它创建一个新对象。这个对象的类型就是 object 。 它将这个新对象的内部不可访问的 [[prototype]] (即 proto )属性设置为构造函数的外部可访问 原型

  • 问题内容: 来自标准库的文件包含围绕228行的以下几行代码: 在这种情况下是什么意思,或者通常是什么关键字? 问题答案: 是Swift 3中的新访问级别,随实现而引入 SE-0117允许区分公共访问权限和公共替代权限 从2016年8月7日开始,Swift 3快照和Xcode 8 beta 6都可以使用它。 简而言之: 在定义模块之外, 可以访问 和 可继承 一个类。一类成员是 可访问 和 可重写

  • 问题内容: Java 13引入了 用于表达式的关键字。 如何使用它,与默认值或值有什么区别? 问题答案: 问答环节 如何使用? 需要完整块时,带有箭头标签: }; 使用传统积木: }; 默认收益有什么区别? 一条语句将控制权返回给 方法 (第8.4节,第§15.12节)或 构造函数 (第8.8节和第15.9节) 的调用者, 而一条语句则通过 使一个封闭的表达式产生一个指定值来转移控制权。 突破值有

  • 在为android开发时,我有时会遇到类似这样的事情: 我不明白关键字有什么意义。

  • 问题内容: 新的SwiftUI教程具有以下代码: 第二行单词和在其网站上被高亮显示,就像它是一个关键字一样。 Swift 5.1似乎没有作为关键字,而且我也看不出该词还有什么其他用处,因为它通常位于类型所在的位置。是否有Swift的未发布新版本?以某种我不知道的方式在类型上使用的函数吗? 关键字有什么作用? 问题答案: 是SE-0244引入的不透明结果类型,在带有Xcode 11的Swift 5.