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提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。 25、short s1 = 1; s1 =...
Java 不支持多重继承,但允许一个类继承多个接口 (extends+implement),实现了 C++ 多重继承的功能,又避免了 C++ 中的多重继承实现方式带来的诸多不便。 3.数据类型及类 Java 是完全面向对象的语言,所有函数和...
JAVA不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了C++多重继承的功能,又避免了C++中的多重继承实现方式带来的诸多不便。 3. 数据类型及类:JAVA是一完全面向对象的语言,所有函数和变量...
JAVA 不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了 C++ 多重继承的功能,又避开了 C++ 中的多重继承实现方式带来的诸多不便。 3. 数据类型及类 JAVA 是完全面向对象的语言,全体函数和...
当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例...
Java不支持多继承,但可以通过接口实现多重继承的功能。`super`关键字用于调用父类的方法。`instanceof`关键字用来检查一个对象是否是特定类的实例。包命名应与文件夹结构对应,`import`语句用于引入其他包中的类,...
23. **日期和时间处理**:Java提供了`Date`、`Calendar`等类用于处理日期和时间,自Java 8起引入了`java.time`包,提供了更强大的时间日期API。 24. **对象参数传递**:在Java中,对象参数的传递实际上是引用传递,...
16. **继承和多态**:Java不支持多重继承,但支持接口。C++则两者都支持。 17. **构造器**:子类如果没有显式定义构造器,会默认调用父类的无参构造器。如果父类没有无参构造器,子类必须显式通过`super`调用父类的...
- 用于定义行为规范,所有的方法默认都是抽象的(Java 8 引入了默认方法和静态方法,但大多数情况仍作为规范使用)。 - 支持多重继承,一个类可以实现多个接口。 - 所有成员变量默认为 `public static final`。 ...