从Main Class中的Interface调用默认方法

时间:2018-03-19 20:26:43

标签: java interface java-8 default-method

我遇到从界面调用默认方法的问题。这是我的代码:

接口:

public interface Pozdrav {

    public static void stat(){
        System.out.println("Ja sam staticni metod");
    }

    default void osn(){
        System.out.println("Ja sam osnovni metod");
    }
}

主要课程:

public class KonkretniPozdrav  implements Pozdrav{

    public static void main(String[] args) {

        Pozdrav.stat();
    }
}

现在,我需要调用默认方法Pozdrav.osn();但是当我这样做时,我收到此错误:

  

错误:(8,16)java:非静态方法osn()不能从静态上下文中引用。

如何调用此默认方法?

4 个答案:

答案 0 :(得分:3)

new KonkretniPozdrav().osn();

要拨打osn,需要Pozdrav的实例。

default方法(实例成员)并不意味着static方法(类成员)。它表明该方法将身体置于界面中。 default方法提供了实现的默认行为。这就是为什么您不必在osn中实施KonkretniPozdrav

答案 1 :(得分:2)

您需要Pozdrav的实例来调用实例方法。例如:

new Pozdrav() {}.osn();

答案 2 :(得分:1)

您需要一个具体的实例来调用该方法。如果您尚未创建具体类型,则可以匿名进行。像,

new Pozdrav() {
}.osn();

输出

Ja sam osnovni metod

答案 3 :(得分:1)

要调用非静态方法,您应该使用关键字new创建该类的实例,例如:KonkretniPozdrav pozdrav = new KonkretniPozdrav();。要调用静态方法,您不需要实例。只需使用 CLASS.Method()进行调用。

你的主要课程会显得像这样。

public class KonkretniPozdrav implements Pozdrav{

    public static void main(String[] args) {

        Pozdrav.stat();
        KonkretniPozdrav konkretnipozdrav = new KonkretniPozdrav();
        konkretnipozdrav.osn();
    }
}

代码的一个考虑因素是接口不应该实现代码,但static方法和default方法除外,它们是正文中允许的代码。接口是实现接口的类应遵守/遵守的合同。通常情况下,会议开始使用字母 I 来表示界面,例如: IPozdrav Here a document about Java interfaces

也许,您会看到抽象类接口

之间的区别