問題
次のインターフェースを正しく実装しているクラスはどれですか。(2つ選択)
public sealed interface MyType permits MyClass { }
選択肢
A)
public class MyClass implements MyType {
public void method() {
System.out.println("MyType::method");
}
}
B)
public abstract class MyClass implements MyType { }
C)
public abstract class MyClass implements MyType {
public void method() {
System.out.println("MyType::method");
}
}
D)
public sealed class MyClass implements MyType {
public void method() {
System.out.println("MyType::method");
}
}
E)
public non-sealed class MyClass implements MyType { }
F)
public final class MyClass implements MyType {
public void method() {
System.out.println("MyType::method");
}
}
解答
A)
public class MyClass implements MyType {
public void method() {
System.out.println("MyType::method");
}
}
B)
public abstract class MyClass implements MyType { }
C)
public abstract class MyClass implements MyType {
public void method() {
System.out.println("MyType::method");
}
}
D)
public sealed class MyClass implements MyType {
public void method() {
System.out.println("MyType::method");
}
}
E)
public non-sealed class MyClass implements MyType { }
F)
public final class MyClass implements MyType {
public void method() {
System.out.println("MyType::method");
}
}
解説
選択肢 A:
MyClass
はMyType
を実装していますが、sealed
インターフェースのpermits
に従っていないため不正です。
選択肢 B:
MyClass
がabstract
であるため、method()
が実装されていないですが、sealed
インターフェースを実装するには具体的な実装が必要です。したがって不正です。
選択肢 C:
MyClass
はabstract
ですが、method()
が実装されています。しかし、sealed
インターフェースのpermits
に従うためには、具体的なクラスとして宣言する必要があるため不正です。
選択肢 D:
MyClass
はsealed
で、MyType
を実装しています。この場合、permits
に従っているため正しいです。
選択肢 E:
MyClass
がnon-sealed
であるため、sealed
インターフェースの規則に反しています。したがって不正です。
選択肢 F:
MyClass
がfinal
であるため、他のクラスがこのクラスを拡張できず、MyType
を正しく実装しています。したがって正しいです。
対象資格:Java SE17 認定資格