【发布时间】:2022-11-30 22:46:20
【问题描述】:
我目前正在做一个 Java 测试,我发现了这个关于继承的问题:
以下关于双胞胎班级的哪些说法是正确的? (选择三个。)
package clone; interface Alex { default void write() { System.out.print("1"); } static void publish() {} void think(); private int process() { return 80; } } interface Michael { default void write() { System.out.print("2"); } static void publish() {} void think(); private int study() { return 100; } } public class Twins implements Alex, Michael { void write() { System.out.print("3"); } static void publish() {} void think() { System.out.print("Thinking..."); } }A. 由于 write() 方法,该类无法编译。
B. 由于 publish() 方法,该类无法编译。
C. 由于 think() 方法,该类无法编译。
D. Alex 接口中定义的所有方法都可以访问 > 在 Twins 类中。
E. Michael 接口中定义的所有方法都可以在 Twins 类中访问。
F. Twins 类不能被标记为抽象回答:
- A、C、E。所有没有 private 修饰符的接口方法都是隐式公开的。在 但是,一个类,一个没有修饰符的方法默认是包私有的。为此原因, write() 和 think() 方法无法编译,因为它们缺少 public 修饰符,使选项A和C正确。这些是唯一的编译器错误,使 B选项错误。选项 D 不正确,因为 process() 方法不可访问 与双胞胎,因为它是私人的。选项E正确,因为所有方法都可以访问。 甚至可以通过调用在 Twins 类中访问被覆盖的默认方法 Michael.super.write()。最后,选项 F 是不正确的,因为如果 它被标记为抽象。
为什么选项字母E是正确的?我知道由于 study() 是私有的,因此无法在课堂外访问。
【问题讨论】:
-
这些问题不适合 Stack Overflow。您应该阅读有关如何发布有意义的问题以及如何在 StackOverflow 上发布的指南
-
恕我直言,答案 E 是错误的- 如果它不编译,它不运行,没有任何东西是可访问的
-
只是一般说明:我们从不谈论“继承”,我们称之为“继承”。
-
@user16320675 好吧,当然可以调用默认方法和静态方法。您也可以调用隐式公共方法,但这只是因为类必须实现它们:P
-
@Maarten 如果整个代码不编译,ergo 不运行怎么办?
标签: java