默认方法和静态方法如何在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

我一直试图弄清楚defaultstatic方法在Java8中究竟是如何工作的?

考虑以下接口:

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
    的实例
  • 为了支持接口中的默认和静态方法,该语言需要哪些新特性/修改
  • 我知道,默认情况下,界面中的所有字段都是默认的公共静态final,这与我的上述问题有关
  • 随着默认方法的引入,我们还需要抽象类吗
  • p.S.

    请随意编辑该问题,以便对其他SO用户更有用。

    请看,您似乎对抽象类和接口有点混淆

    抽象类:

    在抽象类中,我们可以抽象方法和非抽象方法。对于抽象方法me,不需要有适当的方法定义;对于非抽象方法,我们需要有适当的方法体

    类只能在抽象类上扩展

    接口:

    旧时代的接口(Java7)从未有过方法体,随着Java8的出现,我们可以使用default关键字指定方法体

    一个类可以实现多个接口

    因此,当我们需要一个类来符合两个实体的特性时,我们可以使用接口。现在使用default关键字,我们得到了一个由接口本身提供的类的默认方法体(接口的方法),我们可以选择覆盖它,也可以不覆盖它,并给出一个新的方法定义

    底线

    是使用接口还是使用抽象类完全取决于情景需要

  • Java接口默认方法将帮助我们扩展接口,而不用担心破坏实现类

  • 如果那些电脑控制的汽车制造商增加新的 功能,如飞行,他们的汽车?这些制造商 需要指定新的方法来支持其他公司(如 电子制导仪器制造商)以适应其软件 飞车。这些汽车制造商将在哪里申报这些新产品 飞行相关方法?如果他们将它们添加到原始接口, 那么实现了这些接口的程序员就必须 重写它们的实现。如果将它们作为静态方法添加, 然后程序员会将它们视为实用方法,而不是 基本的、核心的方法

  • 好的,静态方法不需要重写,所以作为静态方法的
    final
    是一致的。重写依赖于拥有类的实例。静态方法不与类的任何实例关联,因此该概念不适用。但是,默认方法必须具有如上所述的可重写属性

  • 在Java8的接口中是否可以有默认的ctor、私有字段和实例成员


  • 我喜欢使用默认方法

    list.sort(ordering);
    
    而不是

    Collections.sort(list, ordering);
    

    为了让您的问题对其他用户有所帮助,请将每个帖子的问题限制为一个。最后的4个问题似乎都与默认方法和界面相关。我不认为把它们放在不同的帖子里有什么意义,把它们放在一起更有意义。@Kerry:第四个问题显然是几个已经存在的问题的重复。这已经说明了为什么同时问几个完全不同的问题是不好的。所有标记为的问题都与java 8相关,但在单独的帖子中写不同的问题还是有意义的。公平地说,您能详细说明他们是如何使java在接口中具有默认实现的吗?我接受所有其他的解释。你是在问“他们如何向Java添加/实现该特性”还是“他们通过向Java添加该特性获得了什么(我已经回答了)”@再见,皮莱