zoukankan      html  css  js  c++  java
  • 为什么Java中一个类可以实现多个接口,但只能继承一个类?

    多继承会产生钻石问题(菱形继承)

    • 类 B 和类 C 继承自类 A,且都重写了类 A 中的同一个方法
    • 类 D 同时继承了类 B 和类 C
    • 对于类 B、C 重写的类 A 中的方法,类 D 会继承哪一个?这里就会产生歧义
    • 考虑到这种二义性问题,Java 不支持多重继承


    Java 支持类实现多接口

    • 接口中的方法是抽象的,一个类实现可以多个接口
    • 假设这些接口中存在相同方法(方法名与参数相同),在实现接口时,这个方法需要实现类来实现,并不会出现二义性的问题


    从 JDK1.8 开始,接口中允许有静态方法和方法默认实现。当检测到实现类中实现的多个接口中有相同的默认已实现的方法,编译报错


    PS:在JDK 1.5 上实践,接口可以多继承接口

    package constxiong.interview;
    
    /**
     * 测试继承多接口,实现相同方法
     * 从 JDK1.8 开始,接口中允许有静态方法和方法默认实现
     * 当检测到实现类中实现的多个接口中有相同的默认已实现的方法,编译报错
     * @author ConstXiong
     * @date 2019-11-21 10:58:33
     */
    public class TestImplementsMulitInterface implements InterfaceA, InterfaceB {
    
        public void hello() {
            System.out.println("hello");
        }
    
    }
    
    interface InterfaceA {
        
        void hello();
    
        static void sayHello() {
            System.out.println("InterfaceA static: say hello");
        }
    
        default void sayBye() {
            System.out.println("InterfaceA default: say bye");
        }
    }
    
    interface InterfaceB {
        
        void hello();
        
        static void sayHello() {
            System.out.println("InterfaceB static: say hello");
        }
    
    //    default void sayBye() {
    //        System.out.println("InterfaceB default: say bye");
    //    }
    }


    原文链接
     


     

  • 相关阅读:
    机器学习模型之逻辑回归
    机器学习模型之决策树
    机器学习模型之朴素贝叶斯
    机器学习模型之KNN算法
    Gradle系列之构建脚本基础
    Gradle系列之Groovy基础篇
    Gradle系列之初识Gradle
    Bitmap之内存缓存和磁盘缓存详解
    Bitmap之位图采样和内存计算详解
    WebView中Java与JavaScript的交互
  • 原文地址:https://www.cnblogs.com/ConstXiong/p/12105544.html
Copyright © 2011-2022 走看看