реализация методов stati c для интерфейса - PullRequest
0 голосов
/ 18 июня 2020

предположим, что у меня есть интерфейс:

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() был stati c, но я не могу этого сделать:

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);
}  

Интересно, есть ли что-то, обходной путь или языковая конструкция, которая позволяет мне создавать метод, определяемый интерфейсом a static method?

Ответы [ 4 ]

2 голосов
/ 18 июня 2020

Вы можете определить метод stati c в интерфейсе, но только с его реализацией.

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

Переопределение методов stati c не разрешено в Java, потому что вы вызываете его Class объект, а не объект реализации.

1 голос
/ 18 июня 2020

Если вы можете реализовать метод stati c в интерфейсе, но не можете его перезаписать, помните, что на метод stati c ссылается сам класс, а не его экземпляр.

Чтобы решить вашу проблему, возможно, вы могли бы определить абстрактный класс

0 голосов
/ 18 июня 2020

Невозможно переопределить методы stati c в java.

Однако в подклассе вы можете объявить метод stati c с тем же именем и «замаскировать его как» оригинал. метод - максимально приближенный к вам.

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
0 голосов
/ 18 июня 2020

Нет, это невозможно и не имеет смысла. Интерфейс предназначен для реализации подклассами, вы можете использовать только неабстрактный, реализованный метод stati c в интерфейсе. Вы не можете статически вызвать свой метод интерфейса с помощью

abcd. c ()

, когда он не имеет реализации. Поэтому элементы stati c нельзя переопределить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...