默认方法和静态方法如何在Java8接口中工作?
我一直试图弄清楚default和static方法在Java8中究竟是如何工作的?默认方法和静态方法如何在Java8接口中工作?,java,java-8,jls,Java,Java 8,Jls,我一直试图弄清楚default和static方法在Java8中究竟是如何工作的? 考虑以下接口: public interface Car { default void drive() { System.out.println("Default Driving"); } static int getWheelCount(){ return wheelCount; } int wheelCount = 7; } 以及以下实施: public class
考虑以下接口:
public interface Car {
default void drive() {
System.out.println("Default Driving");
}
static int getWheelCount(){
return wheelCount;
}
int wheelCount = 7;
}
以及以下实施:
public class Benz implements Car { }
现在,如果我转到我的主要方法并写下:
public static void main(String[] args){
Car car = new Benz();
car.drive();
System.out.println(Car.getWheelCount());
System.out.println(Car.wheelCount);
}
我想知道引擎盖下到底发生了什么:
Car
的实例请随意编辑该问题,以便对其他SO用户更有用。请看,您似乎对抽象类和接口有点混淆 抽象类: 在抽象类中,我们可以抽象方法和非抽象方法。对于抽象方法me,不需要有适当的方法定义;对于非抽象方法,我们需要有适当的方法体 类只能在抽象类上扩展 接口: 旧时代的接口(Java7)从未有过方法体,随着Java8的出现,我们可以使用default关键字指定方法体 一个类可以实现多个接口 因此,当我们需要一个类来符合两个实体的特性时,我们可以使用接口。现在使用default关键字,我们得到了一个由接口本身提供的类的默认方法体(接口的方法),我们可以选择覆盖它,也可以不覆盖它,并给出一个新的方法定义 底线 是使用接口还是使用抽象类完全取决于情景需要
final
是一致的。重写依赖于拥有类的实例。静态方法不与类的任何实例关联,因此该概念不适用。但是,默认方法必须具有如上所述的可重写属性我喜欢使用默认方法
list.sort(ordering);
而不是
Collections.sort(list, ordering);
为了让您的问题对其他用户有所帮助,请将每个帖子的问题限制为一个。最后的4个问题似乎都与默认方法和界面相关。我不认为把它们放在不同的帖子里有什么意义,把它们放在一起更有意义。@Kerry:第四个问题显然是几个已经存在的问题的重复。这已经说明了为什么同时问几个完全不同的问题是不好的。所有标记为的问题都与java 8相关,但在单独的帖子中写不同的问题还是有意义的。公平地说,您能详细说明他们是如何使java在接口中具有默认实现的吗?我接受所有其他的解释。你是在问“他们如何向Java添加/实现该特性”还是“他们通过向Java添加该特性获得了什么(我已经回答了)”@再见,皮莱