繁体   English   中英

实现接口的 static 方法

[英]implementing static methods for interface

假设我有一个界面:

public interface abcd{
    public int a();
    public void b();
    public void c();
    public String d(String h, String j);
}  

我在一些 class 中实现它:

public class xyzw implements abcd{

}  

但我希望方法d()为 static,但我不能这样做:

public class xyzw implements abcd{
    public static void c(){
       //some code
    }
}

我也不能这样做:

public interface abcd{
    public int a();
    public void b();
    public static void c();
    public String d(String h, String j);
}  

我想知道是否有某种东西或某种解决方法或某种语言结构允许我将接口定义的方法static方法?

您可以在接口中定义 static 方法,但仅限于实现。

public interface A {
    public static void b() {
        System.out.println("Hi");
    }
}

Overriding of static methods is not allowed in Java, because you call it on Class object, not on implementation object.

如果您可以在接口中实现 static 方法,但不能覆盖它,请记住 static 方法由 class 本身引用,而不是由它的实例引用。

为了解决您的问题,也许您可以定义一个抽象 class

不,这是不可能的,也没有任何意义。 接口意味着由子类实现,您只能在接口中具有非抽象的、已实现的 static 方法。 你不能静态地调用你的接口方法

abcd.c()

当它没有实现时。 这就是为什么不能覆盖 static 元素的原因。

无法覆盖 java 中的 static 方法。

但是,在子类中,您可以声明具有相同名称的 static 方法并将其“屏蔽为”原始方法 - 这是您可以得到的最接近的方法。

interface a {
    public static int f() {
        return 0;
    }
}
interface b extends a {
    public static int f() {
        return 1;
    }
}
System.out.println(a.f());
>> 0

System.out.println(b.f());
>> 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM