Java随笔 - Java 8特性之接口中的default方法和其他类、接口定义方法冲突
722 字
4 分钟
Java随笔 - Java 8特性之接口中的default方法和其他类、接口定义方法冲突
Java 1.8 引入一个新的特性. 接口中定义的方法可以使用 default 关键字提供默认的缺省实现.
这项新特性很便捷的帮助开发者在不修改接口的实现类的前提下,达到扩展功能的目的。可以说是非常的方便。但是这项特性带来便利的同时, 也带来了一些困惑。本文章记录笔者通过实例逐步学习这项变动的过程。
目录
Q1. Java 8 之前继承多个接口. 且父接口中定义的方法有冲突
类结构如下图:

示例代码:
public interface A { void print(String str);}
public interface B { void print(String str);}
public interface C extends A, B {
}上述代码能编译通过。对 C 接口来讲. 父接口中定义的方法都没有具体的逻辑实现, 仅有一个定义。所以不会引起编译冲突. 子类必须实现接口定义的方法.
Q2: Java 8 之后继承多个接口. 且父接口中定义的方法有冲突
而 Java 8 之后,接口中定义了冲突的方法,且有 default 实现时:
public interface A { default void print(String str) { System.out.println("A"); }}
public interface B { default void print(String str) { System.out.println("B"); }}
public interface C extends A, B {
/** * <strong>必须重写父类的方法. 否则编译报错</strong> */ @Override default void print(String str) { // ...do something }}结论: 当接口 A 和接口 B 任意一个有 default 实现时. 接口 C 必须 Override 接口中的冲突的方法.
可以通过 A.super.print(str) 和 B.super.print(str) 来分别指定要继承的默认实现. 示例:C 的 print 方法的 default 实现。先执行 A 再执行 B
public interface C extends A, B { /** * <strong>必须重写父类的方法</strong> */ @Override default void print(String str) { A.super.print(str); B.super.print(str); }}Q3. 继承类和实现接口共存的情况
类结构如下图:

public class A { public void print(String str) { System.out.println("A"); }}
public interface B { default void print(String str) { System.out.println("B"); }}
public class C extends A implements B {
}// => 编译成功。输出“A”结论: 当父类中定义的方法和接口中定义的 default 实现冲突时。隐式的采用类中的方法.
总结
- 当父类或接口中的定义的方法实现有冲突时, 子类必须覆写父中的方法. 或者把类定义为 abstract
- 当子类继承父类, 实现父接口的情况时。隐式的继承父类中的方法.
- 类中定义的方法实现,优先级高于接口中 default 实现
End
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
Java随笔 - Java 8特性之接口中的default方法和其他类、接口定义方法冲突
https://tinyzzh.github.io/posts/2019-09-30-java_class_implements_multiple_interfaces/ 相关文章 智能推荐
1
Rust语言从入门到精通系列 - SeaORM框架实战(数据库DML篇)
Rust 2023-05-30
2
Rust语言从入门到精通系列 - SeaORM框架实践(基础篇)
Rust 2023-05-30
3
Rust语言从入门到精通系列 - SQLx模块MySQL入门
Rust 2023-05-30
4
Rust语言从入门到精通系列 - SQLx模块PostgreSQL入门
Rust 2023-05-30
5
Rust语言从入门到精通系列 - SQLx模块SQLite入门
Rust 2023-05-30
随机文章 随机推荐