为接口实现静态方法

时间:2020-06-18 09:18:01

标签: java

假设我有一个接口:

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

并且我在某些类中实现它:

public class xyzw implements abcd{

}  

但是我希望方法d()是静态的,但是我不能这样做:

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方法?

4 个答案:

答案 0 :(得分:2)

您可以在接口中定义静态方法,但只能通过实现来定义。

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

在Java中不允许覆盖静态方法,因为您是在Class对象上调用的,而不是在实现对象上调用的。

答案 1 :(得分:1)

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

要解决您的问题,也许您可​​以定义一个抽象类

答案 2 :(得分:0)

不,这不可能,没有任何意义。接口是由子类实现的,您只能在接口中使用非抽象的,已实现的静态方法。您不能静态

调用接口方法

abcd.c()

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

答案 3 :(得分:0)

无法在Java中覆盖静态方法。

但是,在子类中,您可以使用相同的名称声明静态方法,并将其“屏蔽为”原始方法-使其尽可能接近。

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