聊聊java中的多继承,解决Java8接口default方法多继承冲突问题【享学Java】(下)

简介: 聊聊java中的多继承,解决Java8接口default方法多继承冲突问题【享学Java】(下)

Java8接口默认方法的多继承问题


我们知道Java8的一大新特性的是:接口中可以写default方法了。这其实是java自己就给自己出了一个问题。


接口可以书写默认方法了,然后又因为接口之间是可以多继承的,因而实质上Java 8的接口多继承其实也会涉及到实现多继承的问题。下面我们通过一个实例来看看Java它在语法层面的解决方案:


interface Father {
    default void eat() {
        System.out.println("爸爸吃饭方式...");
    }
}
interface Mother {
    default void eat() {
        System.out.println("妈妈吃饭方式...");
    }
}


爸爸妈妈都是接口定义,所以儿子Son实现两个接口理论上肯定是阔以的:


class Son implements Father, Mother {
}


不了编译报错如下:


image.png


说明:如果只实现一个接口,编译不会报错且default方法是能直接通过实例调用的。


==解决方案: ==


class Son implements Father, Mother {
    @Override
    public void eat() {
        System.out.println("儿子自己的吃饭方式~~~");
        // 注意这种语法是调用 【指定接口】的defualt方法:
        // 若接口名字没有冲突,直接super调用即可~~~
        Father.super.eat();
        Mother.super.eat();
    }
}


测试:

public class Main {
    public static void main(String[] args) {
        new Son().eat();
    }
}


输出结果:


儿子自己的吃饭方式~~~
爸爸吃饭方式...
妈妈吃饭方式...


归纳总结:解决接口default方法冲突的三步骤:


  1. 方法签名相同时,才表示出现了冲突。
  2. 类中的方法优先级最高。类或者父类中的方法实现优先级大于任何接口的默认方法
  3. 其实,子接口的默认方法优先级更高。
  4. 若最终还是无法判断,那么实现类必须通过显示复写的方式复写默认方法,然后再自己通过xxx.super.xxx()的方式来指定具体使用哪个接口的实现


总之,Java8在语言层面上,对若出现接口default方法冲突的解决方案是:不作为。其实不作为也是一种作为,它让编译器去提示调用者必须显示的override这个冲突的方法,让coder自己去决定调用逻辑~


总结


写这篇文章的原因是我自己在写default方法的时候出现了冲突,从而决定多java的多继承深入了解一下。

带着问题来驱动学习这样的效果会更好,希望本文也能给你带来帮助~


The last:如果觉得本文对你有帮助,不妨点个赞呗。当然分享到你的朋友圈让更多小伙伴看到也是被作者本人许可的~



相关文章
|
1天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
15 6
|
1天前
|
存储 Java 数据处理
Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。
【10月更文挑战第16天】Java Set:无序之美,不重复之魅!Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。通过 hashCode() 和 equals() 方法实现唯一性,适用于需要唯一性约束的数据处理。示例代码展示了如何使用 HashSet 添加和遍历元素,体现了 Set 的高效性和简洁性。
12 4
|
3天前
|
存储 Java 数据处理
Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。
Java Set:无序之美,不重复之魅!Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。它通过 hashCode() 和 equals() 方法确保元素唯一性,适用于需要唯一性约束的数据处理。示例代码展示了如何使用 HashSet 实现这一特性。
12 5
|
1天前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
7 2
|
2月前
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
13天前
|
Java
java继承和多态详解
java继承和多态详解
33 5
|
1月前
|
Java 编译器
Java——类与对象(继承和多态)
本文介绍了面向对象编程中的继承概念,包括如何避免重复代码、构造方法的调用规则、成员变量的访问以及权限修饰符的使用。文中详细解释了继承与组合的区别,并探讨了多态的概念,包括向上转型、向下转型和方法的重写。此外,还讨论了静态绑定和动态绑定的区别,以及多态带来的优势和弊端。
44 9
Java——类与对象(继承和多态)
|
2月前
|
Java
Java 新手入门:Java 封装、继承、多态详解
Java 新手入门:Java 封装、继承、多态详解
36 1
|
3月前
|
Java 数据安全/隐私保护
Java中的类继承与多态详解
Java中的类继承与多态详解
|
4月前
|
安全 Java
深度解读Java的继承和多态的特性
深度解读Java的继承和多态的特性