`
jobar
  • 浏览: 351379 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

缺省方法(2)-Java中缺省方法会引入多重继承吗?

 
阅读更多
Java中缺省方法会引入多重继承吗?

不会,因为多重继承已经存在于Java中了。接口类型的多重继承从一开始一直是语言的一个特点。缺省方法确实引入了一种新的多重继承即多重继承行为。Java将依然不会有多重继承的状态,就像C++那样。

这里是多重继承行为的一个例子。新的接口java.util.Sized声明了方法size和sEmpty并提供了后者的默认实现:
   
public interface Sized { 
        public default boolean isEmpty() { 
            return size() == 0; 
        } 
        public int size(); 
    } 

新接口java.util.Traversable<T>声明了方法forEach并提供了一个默认的实现:
   
public interface Traversable<T> { 
        public default void forEach(Block<? super T> block) { 
            for (T t : this) { 
                block.apply(t); 
            } 
        } 
    } 

假设我们现在声明一个类SimpleCollection<T>并为其提供iterator和size的实现:

   
class SimpleCollection<T> implements Sized, Traversable<T> { 
        public Iterator<T> iterator() { ... } 
        public int size() { ... } 
    } 

然后,给定一个声明
   
SimpleCollection<String> sc = new SimpleCollection<>();


编译下面的语句:
Sized s = sc;                        // SimpleCollection是Sized的子类型 
    Traversable<String> t = sc;          // SimpleCollection是Traversable的子类型
    System.out.println(sc.isEmpty());    // isEmpty是来自Sized接口缺省实现
    sc.forEach(System.out::println);     // forEach是来自Traversable的缺省实现


原文链接:http://www.lambdafaq.org/do-default-methods-introduce-multiple-inheritance-to-java/
分享到:
评论

相关推荐

    java 面试题 总结

    忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。 25、short s1 = 1; s1 =...

    java和c++区别

    Java 不支持多重继承,但允许一个类继承多个接口 (extends+implement),实现了 C++ 多重继承的功能,又避免了 C++ 中的多重继承实现方式带来的诸多不便。 3.数据类型及类 Java 是完全面向对象的语言,所有函数和...

    JAVA和C++区别详解.doc

    JAVA不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了C++多重继承的功能,又避免了C++中的多重继承实现方式带来的诸多不便。 3. 数据类型及类:JAVA是一完全面向对象的语言,所有函数和变量...

    2022年JAVA和C++区别都有哪些.docx

    JAVA 不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了 C++ 多重继承的功能,又避开了 C++ 中的多重继承实现方式带来的诸多不便。 3. 数据类型及类 JAVA 是完全面向对象的语言,全体函数和...

    超级有影响力霸气的Java面试题大全文档

    当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例...

    个人java学习笔记.doc

    Java不支持多继承,但可以通过接口实现多重继承的功能。`super`关键字用于调用父类的方法。`instanceof`关键字用来检查一个对象是否是特定类的实例。包命名应与文件夹结构对应,`import`语句用于引入其他包中的类,...

    2011年JAVA面试题汇总

    23. **日期和时间处理**:Java提供了`Date`、`Calendar`等类用于处理日期和时间,自Java 8起引入了`java.time`包,提供了更强大的时间日期API。 24. **对象参数传递**:在Java中,对象参数的传递实际上是引用传递,...

    JAVA基础知识学习技巧总结.pdf

    16. **继承和多态**:Java不支持多重继承,但支持接口。C++则两者都支持。 17. **构造器**:子类如果没有显式定义构造器,会默认调用父类的无参构造器。如果父类没有无参构造器,子类必须显式通过`super`调用父类的...

    面试技巧解答

    - 用于定义行为规范,所有的方法默认都是抽象的(Java 8 引入了默认方法和静态方法,但大多数情况仍作为规范使用)。 - 支持多重继承,一个类可以实现多个接口。 - 所有成员变量默认为 `public static final`。 ...

Global site tag (gtag.js) - Google Analytics