Java 基础 - 继承

参考

C++多继承有什么坏处,Java的接口为什么可以摈弃这些坏处?
C++多继承(钻石继承)的问题和解决
C++继承与java继承的区别

总结

  1. 设计继承的主要原因是为了重用,它是提升软件开发效率的主要因素之一 继承机制

  2. 多继承存在缺陷,主要原因是多继承的使用会产生diamond problem/钻石危机/菱形继承. C++和Java 都存在多继承的问题

  3. 对于C++来说,特性之一是类多继承,为了解决多继承带来的问题:二义性和数据冗余,C++可以通过指明访问对象解决二义性问题,通过虚函数解决数据冗余问题。C++避免多继承问题

  4. 对于Java 来说,它为了避免类的多继承产生的问题,其特性之一是类单继承,接口多继承。类的单继承实现的重用,接口多继承中:接口内不能包含成员变量和方法实现,避免了二义性和数据冗余问题。

    尽管如此, Java中仍然可以通过内部类和接口来实现多继承,但是不会出现二义性问题,因为用内部类实现多继承过程中由设计者重新进行函数命名,从而避免了钻石危机 Java实现菱形继承

    除此之外,Java 8 加入的新的语言特性 : 默认方法, default 这个关键字告诉 javac 用户真正需要的是为接口添加一个包含方法体的新方法。(除了添加了一个新的关键字,默认方法在继承规则上和普通方法也略有区别)由于Java中接口允许多重继承,因此有可能碰到两个接口包含签名相同的默认方法的情况,此时javac并不能明确到底继承了哪一个接口中的默认方法,因此编译器就会报错。当然,在子类中实现这个方法就能够解决编译错误。

C++基础相关

  • C++函数的重载的规则:
    函数名称必须相同。
    参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。
    函数的返回类型可以相同也可以不相同。
    仅仅返回类型不同不足以成为函数的重载。

  • C++函数重载过程中的二义性和类型转换

  • C++ 访问权限继承方式

  • C++的多继承有什么缺点和优点?

  • C++ 类的继承语法

class 派生类名:[继承方式] 基类名{
    派生类新增加的成员
}

你可能感兴趣的:(Java 基础 - 继承)