Java为什么T在扩展接口的时候还在调用默认方法
Java Why T is still calling default method when T extends the interface
public class Draw<T extends Print> (Print is a interface)
其他类:
public interface Print {
static void info(String message) {
System.out.println("failed");
}
}
public class Test implements Print {
static void info(String message) {
System.out.println(message);
}
}
当使用 new Draw<Test>()
并尝试 运行 T.info("Test");
它只打印“失败”
我做错了什么吗?
静态方法不会被覆盖。您必须调用 Test.info 才能调用您的方法。
静态方法位于接口上,因为它是放置它们的方便位置。这不是您可以覆盖的东西,也不是默认方法。默认方法不是静态的,你必须使用 default 关键字。
如果你想要多态性,使用实例方法,而不是静态方法。
public class Draw<T extends Print> (Print is a interface)
其他类:
public interface Print {
static void info(String message) {
System.out.println("failed");
}
}
public class Test implements Print {
static void info(String message) {
System.out.println(message);
}
}
当使用 new Draw<Test>()
并尝试 运行 T.info("Test");
它只打印“失败”
我做错了什么吗?
静态方法不会被覆盖。您必须调用 Test.info 才能调用您的方法。 静态方法位于接口上,因为它是放置它们的方便位置。这不是您可以覆盖的东西,也不是默认方法。默认方法不是静态的,你必须使用 default 关键字。
如果你想要多态性,使用实例方法,而不是静态方法。