我一直在努力思考如何实际做到这一点default and static方法在 java 8 中工作吗?
考虑以下接口:
public interface Car {
default void drive() {
System.out.println("Default Driving");
}
static int getWheelCount(){
return wheelCount;
}
int wheelCount = 7;
}
以及以下实施:
public class Benz implements Car { }
现在,如果我进入我的 main 方法并编写:
public static void main(String[] args){
Car car = new Benz();
car.drive();
System.out.println(Car.getWheelCount());
System.out.println(Car.wheelCount);
}
我想知道幕后到底发生了什么:
- 是否在实例上调用默认方法
Car
以类似于抽象类的工作方式?
- 该语言需要哪些新功能/修改才能支持接口中的默认方法和静态方法?
- 我知道默认情况下,一个界面中的所有字段都是默认的
public static final
,这与我的上述问题有任何关系吗?
- 引入默认方法后,我们还需要抽象类吗?
P.S.
请随意编辑问题,使其对其他 SO 用户更有用。
Yes.
Java 接口默认方法将帮助我们扩展接口,而不必担心破坏实现类。
如果那些电脑控制的汽车制造商添加新的东西会怎样?
他们的汽车是否具备飞行等功能?这些厂家
需要指定新的方法来使其他公司(例如
电子制导仪器制造商)调整其软件
飞行汽车。这些汽车制造商将在哪里宣布这些新产品
飞行相关方法?如果他们将它们添加到原来的界面中,
那么实现这些接口的程序员将不得不
重写他们的实现。如果他们将它们添加为静态方法,
那么程序员就会将它们视为实用方法,而不是
基本的、核心的方法。
AFAIK, 静态方法不需要重写,所以final
静态方法是一致的。重写取决于是否有类的实例。 A静态方法不与类的任何实例关联,因此该概念不适用。然而,默认方法必须具有可重写的属性,正如我上面引用的那样。
Java 8 的接口中可以有默认构造函数、私有字段、实例成员吗?
我喜欢使用默认方法,
list.sort(ordering);
代替
Collections.sort(list, ordering);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)