纠结的默认方法

【编程导论(Java)·4.3Java接口】

在【0.3.1 Java简介】中,有这么一段话:“请注意:Java并非作为教学语言设计的。世界各地的大学在讲授Java的过程中均遇到一些教学上的困难(如Java语言和API的快速升级),这些困难是计算机科学教育中一般性的挑战。”

Java8中引入的默认方法,充分展示了Java平台概念的一致性JDK向前兼容之间的矛盾,而且以牺牲概念的一致性而满足JDK向前兼容。

其后果是原有的Java语言设计思路被破坏,Java接口与抽象类的区别被抹杀。

希望程序员对待默认方法,能够将它视为Java的操作符重载那样的一种不向程序员开放的机制,以保持Java语言概念的一致性。

纠结的默认方法

时间: 2024-10-27 23:37:34

纠结的默认方法的相关文章

接口的默认方法

Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法.这种能力是向后兼容的,以便旧接口可以使用Java 8的lambda表达式功能. 例如,List和Collection没有foreach方法 public interface vehicle { default void print(){ System.out.println("I am a vehicle!"); } } 静态默认方法 public interface ve

Java 8 默认方法和多继承深入解析

以前经常谈论的Java对比c++的一个优势是Java中没有多继承的问题. 因为Java中子类只能继承(extends)单个父类, 尽管可以实现(implements)多个接口,但是接口中只有抽象方法,方法体是空的,没有具体的方法实现,不会有方法冲突的问题. 这些都是久远的说法了,自从今年Java 8发布后, 接口中也可以定义方法了(default method). 之所以打破以前的设计在接口中增加具体的方法, 是为了既有的成千上万的Java类库的类增加新的功能, 且不必对这些类重新进行设计. 比

java8-新特性--(接口的默认方法与静态方法)

Java 8用默认方法与静态方法这两个新概念来扩展接口的声明. public interface Inte{ void method(); default void defaultMethod(){ System.out.println("default"); } static void staticMehod(){ System.out.println("static"); } }   public static void main(String[]args){

Java8新特性——接口的默认方法和类方法

Java8新增了接口的默认方法和类方法: 以前,接口里的方法要求全部是抽象方法,java8以后允许在接口里定义默认方法和类方法: 不同的是: 默认方法可以通过实现接口的类实例化的对象来调用,而类方法只能在本接口中调用或在实现类中实现 下面是使用实例: 1 public interface MyInter { 2 default void df(){ //声明一个接口的默认方法 3 4 System.out.println("i'am default f"); 5 sf(); //调用本

Java 8 - Interface Default Method接口默认方法

Java 8 相比于Java 7 推出了几大特色(features)(接口默认方法)default methods in interface, (接口静态方法)static method in interface, 函数编程(functional programming), lamda expression, stream API. 这里首先介绍以下默认接口方法 1.什么是默认接口方法 java 8 允许在接口定义并编写实现方法.例子: interface Collection{ void ad

java8之lambda表达式(默认方法)

许多开发语言都将函数表达式集成到了其集合库中.这样比循环方式所需的代码更少,并且更加容易理解.以下面的循环为例: for(int i = 0; i < list.size(); i++)      System.out.println(list.get(i)); 事实上有一种更好的方式.API开发人员可以提供一个forEach方法,用来将一个函数应用到集合的每个元素上.下面是使用这种方式编写的一个简单调用: package java8test; import java.util.Arrays;

Java8接口中的默认方法

Java8新增特性,可以为接口中添加默认方法,实现这个接口的所有类都会继承这个方法,这样看起来,接口和类的界限就有点不明显了,同时也会带来多继承,菱形问题.这样设计的初衷是什么? 重所周知,java8开始支持lambda表达式,可以把函数当做参数传递,最明显的lambda表达式应用场景莫过于对collection的每一个元素应用lambda.如果想为Collection实现lambda表达式:list.forEach(…); // 这就是lambda代码 首先想到的是为Collection的父接

Java8默认方法

Java8引入的接口默认方法实现一个新的概念.此功能是为了向后兼容性增加,使旧接口可用于利用JAVA8. lambda表达式的能力,例如,列表或集合接口不具备forEach方法声明.从而增加了这样的方法只会打破收集框架实现. Java8引入了默认的方法使列表/Collection接口可以拥有forEach默认方法,并实行类实现这些接口不需要实现相同功能. 语法 public interface vehicle { default void print(){ System.out.println(

深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

最近看了一下java 8的一些新特性,其中最重要的莫过于Lambda表达式了,通过一阵子的学习,原本准备自己写一篇博客的,后来阅读了一位学长翻译过来的博客(原文是Brain Goetz的State of Lambda,下面会给出原文链接),觉得写的十分完美,把我想要写的和我没想到的都罗列了出来,就把这个分享给大家了. 注:原译文见  http://lucida.me/blog/java-8-lambdas-insideout-language-features/ 英语原版见:http://cr.