在网上我总是读到这样的东西
Java接口没有状态,也没有行为
如果您查看状态的公共定义是什么,那么您很可能以
对象有什么,学生有名字,姓,年龄等
问题是,由于Java 8具有它们的默认方法,所以我也可以定义一些字段并使用它们以及函数。
所以,我想知道说Java中的接口没有状态和行为是否仍然有效?
public interface DefaultInterface {
List<Integer> numbers = new LinkedList<>();
default List<Integer> getNumbers() {
return numbers;
}
default void addId(int value) {
numbers.add(value);
}
default IntStream perform(String string) {
return string.chars();
}
void implementMe();
}发布于 2019-05-05 22:58:59
在很长一段时间内,Java接口只能是“纯”接口,而没有默认的实现、状态和行为。默认接口实现是一种较新的语言特性。它出现在Java 8 (2014)中。
使用默认实现的接口背后的意图是允许向接口添加方法,而不必更改实现该接口的现有类。新方法获得默认实现(而旧方法可能没有默认实现),实现接口的现有类不必实现新方法。
具有默认实现的接口也可以像用于多个实现继承的抽象类一样使用。
让我们看一下其他语言的接口。
interface关键字。使用class关键字和纯虚拟函数声明纯接口(没有默认实现)。interface关键字,但接口没有默认实现。因此,使用interface声明的类型只能是没有实现的纯接口。发布于 2019-05-06 15:50:16
这里可能不清楚的一点是,这个定义:
List<Integer> numbers = new LinkedList<>();是接口上下文中的隐式static和final,而在任何(其他)类级别的上下文中,它都是隐式的成员声明。我认为可以公平地说,这有点令人困惑。这就是为什么在IDE中设置语法着色以将静态(和/或静态-最终)声明显示为不同颜色(如果可能的话)的原因之一。
所以这里的状态是与接口类相关联的,而不是它的实例。因此,“说Java中的接口没有状态是有效的”这个问题有点不清楚。是的,接口类可以具有状态,但大多数人在谈论状态时可能并不是这样想的,例如,“field”通常指的是成员级引用,而不是类级,除非您指定了“静态字段”
发布于 2019-05-06 14:39:01
通过添加默认方法,接口确实有行为。但是,对于状态可能不是这样(取决于国家的定义):
接口中的List<Integer> numbers = new LinkedList<>();具有隐式修饰符public static final,这意味着numbers不是任何实现类中的字段,而是“静态/类常量”,而不是作为接口实例的任何对象的状态的一部分。由于任何状态(例如属性和字段)通常都是实现细节,因此它不属于接口定义。
https://softwareengineering.stackexchange.com/questions/391458
复制相似问题