从 Main Class 中的接口调用默认方法
Calling a default method from Interface in Main Class
我在从接口调用默认方法时遇到问题。这是我的代码:
接口:
public interface Pozdrav {
public static void stat(){
System.out.println("Ja sam staticni metod");
}
default void osn(){
System.out.println("Ja sam osnovni metod");
}
}
主要class:
public class KonkretniPozdrav implements Pozdrav{
public static void main(String[] args) {
Pozdrav.stat();
}
}
现在,我需要调用默认方法 Pozdrav.osn();
但是当我这样做时,我收到此错误:
Error:(8, 16) java: non-static method osn() cannot be referenced from a static context.
如何调用这个默认方法?
您需要一个 Pozdrav
的实例来调用它的实例方法。例如:
new Pozdrav() {}.osn();
您需要一个具体实例来调用该方法。如果您尚未创建具体类型,则可以匿名创建。喜欢,
new Pozdrav() {
}.osn();
产出
Ja sam osnovni metod
new KonkretniPozdrav().osn();
为了调用 osn
,需要一个 Pozdrav
的实例。
一个default
方法(实例成员)并不意味着一个static
方法(class成员)。它表明该方法将在接口中包含主体。 default
方法提供了实现的默认行为。这就是为什么您不必在 KonkretniPozdrav
.
中实施 osn
要调用非静态方法,您应该使用关键字 new
创建 class 的实例,示例:KonkretniPozdrav pozdrav = new KonkretniPozdrav();
。要调用静态方法,您不需要实例。只需调用 CLASS.Method().
你的主要 class 会像这样。
public class KonkretniPozdrav implements Pozdrav{
public static void main(String[] args) {
Pozdrav.stat();
KonkretniPozdrav konkretnipozdrav = new KonkretniPozdrav();
konkretnipozdrav.osn();
}
}
对您的代码的一个考虑是接口不应该有代码实现,除了在 static
方法和 default
方法中,它们是主体中允许的代码。接口是实现接口的 classes 应该 comply/obey 的契约。通常是以字母I作为接口开头的约定,例如:IPozdrav。
Here a document about Java interfaces。
也许,您会看看 Abstract class 与 Interfaces
之间的区别
我在从接口调用默认方法时遇到问题。这是我的代码:
接口:
public interface Pozdrav {
public static void stat(){
System.out.println("Ja sam staticni metod");
}
default void osn(){
System.out.println("Ja sam osnovni metod");
}
}
主要class:
public class KonkretniPozdrav implements Pozdrav{
public static void main(String[] args) {
Pozdrav.stat();
}
}
现在,我需要调用默认方法 Pozdrav.osn();
但是当我这样做时,我收到此错误:
Error:(8, 16) java: non-static method osn() cannot be referenced from a static context.
如何调用这个默认方法?
您需要一个 Pozdrav
的实例来调用它的实例方法。例如:
new Pozdrav() {}.osn();
您需要一个具体实例来调用该方法。如果您尚未创建具体类型,则可以匿名创建。喜欢,
new Pozdrav() {
}.osn();
产出
Ja sam osnovni metod
new KonkretniPozdrav().osn();
为了调用 osn
,需要一个 Pozdrav
的实例。
一个default
方法(实例成员)并不意味着一个static
方法(class成员)。它表明该方法将在接口中包含主体。 default
方法提供了实现的默认行为。这就是为什么您不必在 KonkretniPozdrav
.
osn
要调用非静态方法,您应该使用关键字 new
创建 class 的实例,示例:KonkretniPozdrav pozdrav = new KonkretniPozdrav();
。要调用静态方法,您不需要实例。只需调用 CLASS.Method().
你的主要 class 会像这样。
public class KonkretniPozdrav implements Pozdrav{
public static void main(String[] args) {
Pozdrav.stat();
KonkretniPozdrav konkretnipozdrav = new KonkretniPozdrav();
konkretnipozdrav.osn();
}
}
对您的代码的一个考虑是接口不应该有代码实现,除了在 static
方法和 default
方法中,它们是主体中允许的代码。接口是实现接口的 classes 应该 comply/obey 的契约。通常是以字母I作为接口开头的约定,例如:IPozdrav。
Here a document about Java interfaces。
也许,您会看看 Abstract class 与 Interfaces
之间的区别