在主类中调用Java接口默认方法遇错误,寻求解决方法
解决Java接口默认方法调用问题
你遇到的问题核心很明确:默认方法是实例级别的方法,不能像静态方法那样直接通过接口名调用。静态方法stat()属于接口本身,所以Pozdrav.stat()的调用是正常的,但默认方法osn()必须依托接口的实例才能执行。
下面给你两种简单可行的调用方式:
方式1:通过实现类的实例调用
你的KonkretniPozdrav类已经实现了Pozdrav接口,会自动继承接口的默认方法,直接创建该类的实例就能调用:
public class KonkretniPozdrav implements Pozdrav{ public static void main(String[] args) { Pozdrav.stat(); // 静态方法调用正常 // 创建实现类实例,调用默认方法 KonkretniPozdrav myPozdrav = new KonkretniPozdrav(); myPozdrav.osn(); } }
方式2:通过接口的匿名实现类实例调用
如果不想单独创建实现类的实例,也可以直接生成接口的匿名实现对象来调用默认方法:
public class KonkretniPozdrav implements Pozdrav{ public static void main(String[] args) { Pozdrav.stat(); // 创建匿名接口实例,调用默认方法 Pozdrav anonymousPozdrav = new Pozdrav() {}; anonymousPozdrav.osn(); } }
额外说明
默认方法的设计目的是给接口新增实例方法时,不破坏已有实现类的兼容性。它和静态方法的核心区别在于:
- 静态方法属于接口类本身,无需实例即可执行
- 默认方法属于接口的实例,必须通过对象实例才能访问
内容的提问来源于stack exchange,提问作者Milan Maxa Maksimović
相关产品推荐
相关产品推荐

