有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (4) 个答案

  1. # 1 楼答案

    abstract关键字意味着子类必须重写该方法——这是Java支持多态性的方法之一。如果你想让它成为子类无法覆盖的方法,你可以把它标记为final。因此,不可能有一个“抽象最终”的方法,因为它们是完全相反的

    static关键字也意味着final——所有静态方法也都是final。因此,不可能有一个既静态又抽象的方法,因为你可以创建一个抽象且最终的方法

    静态是final的原因是它绑定到类而不是实例。这意味着编译器在编译时而不是运行时查找它,以确定调用哪个方法。原因是什么?Java设计者做出的任意决定——他们本可以允许重写静态方法,但决定不重写。我没有任何特别的见解来解释为什么这个人不幸地选择了一个而不是另一个

  2. # 2 楼答案

    定义static关键字是为了用类名而不是对象来调用方法。这意味着该方法必须有某种定义。但是抽象意味着你没有关于这个方法的任何细节,正如它所说的**Abstract**。继承或扩展类时,可以定义该方法

    考虑一个界面

    如果你问的是在抽象类中有一个静态方法,那就不同了。抽象类本质上是一个接口,只包含一个say函数的模板,以后必须通过继承/扩展该类来实现。一旦扩展该类,静态方法就不会与之一起出现(默认情况下,除非访问修饰符为public/protected)

  3. # 3 楼答案

    静态方法不是继承的。因此,将其抽象化是毫无意义的

  4. # 4 楼答案

    正如其他人所说,静态+抽象在Java中毫无意义。但也有(罕见)的情况下,我希望我能做到这一点

    我想要的结果基本上是说。。。“扩展此抽象类(或实现此接口)的所有具体类必须提供具有此签名的静态方法。”这种能力将允许这些类提供关于它们自己的元信息

    通常,在这些情况下,我会使用实例方法。如果您规定具体实现必须支持默认(无参数)构造函数,那么您可以

    MyInterface obj = MyClassThatImplementsMyInterface.newInstance();
    obj.invokeTheMethodIWishWasBothStaticAndAbstract();