爪哇2博客
爪哇2博客

爪哇 8中的接口默认方法

爪哇中的接口默认方法
在这篇文章中,我将介绍接口中引入的默认方法  爪哇 8.

当您创建接口并且许多类实现该接口时,您是否曾经遇到过这种情况。现在,您需要向接口添加新方法。添加新方法后,您的竞彩篮球分析项目将充满编译错误,因为您需要将这些新方法添加到实现该接口的所有类中(如果某个类实现了接口,则必须在该类中实现其所有方法)

让’s take an example:
创建一个名为Decorable的接口

1
2
3
4
5
 
上市 接口 可装饰的 {
    虚空 decorateWithCurtains();
    }
 

现在,创建一个名为Room的类,该类将实现此接口。

1
2
3
4
5
6
7
 
上市 房间 实施 可装饰的{
    上市 虚空 decorateWithCurtains() {
        系统..打印(“用窗帘装饰房间”);
    }
}
 

现在这是您当前的实现,现在有了一种新的装饰方式,您想将其添加到Decorable接口中。

1
2
3
4
5
6
7
 
上市 接口 可装饰的 {
 
    虚空 decorateWithCurtains();
    虚空 decorateWithPaints();
 }
 

在Room类中,您将收到以下错误:

如果我们使用默认方法怎么办:

1
2
3
4
5
6
7
8
9
 
上市 接口 可装饰的 {
    虚空 decorateWithCurtains();
    默认 虚空 decorateWithPaints()
    {
           系统..打印(“使用油漆装饰”);
    }
  }
 

如您所见,我们已经将decorateWithPaints()设置为默认值,并且由于在Decorable接口中提供了默认实现,因此在Room类中不会出现任何错误。

为什么使用默认方法

这个的单线可能是“向后兼容”如果JDK修改了接口,则实现该接口的所有类都会中断。

为了在竞彩篮球分析 8中添加lambda表达式,JDK需要添加方法(例如 前言)到List或collections接口,但是如果将此方法添加到这些接口,它将破坏数百万行代码,作为实现该接口的类,需要实现其所有方法。

通过在接口中添加默认方法,您可以提供它的默认实现,而不会影响实现类,因为它包括该方法的实现,并且需要该方法的任何实现类都可以覆盖它。

多重继承呢?

向接口添加默认实现可能会引起多重继承的歧义。由于两个接口可以提供相同的默认方法,并且在调用时可能会有歧义。当出现这种情况时,竞彩篮球分析 8将为您提供编译时异常。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
上市 接口 可装饰的 {
    默认 虚空 decorateWithPaints()
    {
       系统..打印(“使用油漆装饰”);
    }
   }
 
上市 接口 可上漆的
{
    默认 虚空 decorateWithPaints()
    {       
        系统..打印(“使用油漆装饰”);  
    }
}
 
上市 房间 实施 可装饰的,可上漆的{
    }
 

因此它将给您以下编译时错误:

您可以通过覆盖Room类中的decorateWithPaints方法来解决此编译错误

1
2
3
4
5
6
7
8
9
 
上市 房间 实施 可装饰的,可上漆的{
 
    上市 虚空 decorateWithPaints()
    {       
        系统..打印(“使用油漆装饰”);  
  }
}
 

默认方法和抽象类之间的区别

引入默认方法来实现接口与抽象类之间的桥梁。现在的接口看起来与抽象类非常相似,但是仍然存在差异。让我们列出他们

参数
抽象类
使用默认方法进行接口
对象状态
抽象类可以保存对象的状态
具有默认方法的接口无法保存对象状态
访问修饰符
抽象类方法可以具有public,protected,private和default修饰符
接口方法默认为public。您不能将其与其他访问修饰符一起使用
建设者
抽象类可以有构造函数
接口不能有构造函数
成员变量
它可以有成员变量

导入联系人

您可能还喜欢:

分享这个

作者

关注作者

相关文章

  • 在竞彩篮球分析中将日期转换为LocalDate
    1月12日

    爪哇日期到LocalDate

    在这篇文章中,我们将看到如何在竞彩篮球分析中将Date转换为LocalDate。有时,我们可能需要将Date转换为新的竞彩篮球分析 8 API,反之亦然。在竞彩篮球分析中,有多种将Date转换为LocalDate的方法。另请参见:使用Date类的[InInstant()方法将竞彩篮球分析中的LocalDate转换为Date…]

  • 在竞彩篮球分析中将LocalDate转换为Date
    1月11日

    迄今为止的竞彩篮球分析 LocalDate

    在这篇文章中,我们将看到如何将LocalDate转换为Date。 爪哇 8引入了许多有关日期和时间的新API。有多种方法可以将竞彩篮球分析 LocalDateTime转换为日期。使用Instant对象您可以使用来自Zone的Instant对象将LocalDate转换为Date。这是 […]

  • 将流转换为竞彩篮球分析中的列表
    12月31日

    爪哇流列表

    在本文中,我们将看到如何在竞彩篮球分析中将Stream转换为List。在竞彩篮球分析中,有多种方法可以将Stream转换为List。使用Collectors.toList()可以将Collectors.toList()传递给Stream.collect()方法,以在竞彩篮球分析中将Stream转换为List。流’的collect方法对Stream和Collectors的元素执行可变的约简操作。toList()提供[…]

  • 在竞彩篮球分析中将LocalDateTime转换为时间戳
    11月18日

    在竞彩篮球分析中将LocalDateTime转换为时间戳

    在本文中,我们将如何将LocalDateTime转换为Timestamp。在学习如何将localdatetime转换为时间戳之前,让我们了解LocalDateTime和Timestamp,并了解这种转换的重要性。 LocalDateTime LocalDateTime在竞彩篮球分析 8中已引入。LocalDateTime可以导入时间包:import 爪哇.time.LocalDateTime; LocalDateTime是使用的不可变对象[…]

  • 8月28日

    爪哇 8流 API深入指南

    在这篇文章中,我们将看到竞彩篮球分析 8流的深入概述,其中包含许多示例和练习。简介您可能认为Stream必须类似于InputStream或OutputStream,但是’并非如此。流表示支持顺序和并行聚合操作的一系列元素。流不存储[…]

  • 要映射的竞彩篮球分析流列表
    4月26日

    要映射的竞彩篮球分析流列表

    在本文中,我们将看到如何在竞彩篮球分析 8中使用Stream将List转换为Map。’s toMap()可与Stream一起使用,以在竞彩篮球分析中将List转换为Map。考虑一个名为Movie的类,它具有3个字段–ID,名称和流派[crayon-601daa706c8e5674314196 /]创建电影列表并将其转换为[…]

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

订阅我们的新闻

获取质量教程到您的收件箱。现在订阅。


让’s be Friends

©2020 爪哇2博客