問題
次のインターフェースを正しく実装しているクラスはどれですか。
public sealed interface MyType permits MyClass {
void method();
}
A) public non-sealed class MyClass implements MyType { }
B) public abstract class MyClass implements MyType {
public void method() { System.out.println("MyType::method"); }
}
C) public sealed class MyClass implements MyType {
public void method() { System.out.println("MyType::method"); }
}
D) public class MyClass implements MyType {
public void method() { System.out.println("MyType::method");}
}
E) public abstract class MyClass implements MyType {
}
F) public final class MyClass implements MyType {
public void method() { System.out.println("MyType::method");}
}
解答
A) public non-sealed class MyClass implements MyType { }
B) public abstract class MyClass implements MyType {
public void method() { System.out.println("MyType::method"); }
}
C) public sealed class MyClass implements MyType {
public void method() { System.out.println("MyType::method"); }
}
D) public class MyClass implements MyType {
public void method() { System.out.println("MyType::method");}
}
E) public abstract class MyClass implements MyType {
}
F) public final class MyClass implements MyType {
public void method() { System.out.println("MyType::method");}
}
解説
MyType
インターフェースは sealed
として定義されており、その permits
リストには MyClass
が含まれています。つまり、MyClass
は MyType
を実装できる唯一のクラスです。C は sealed
クラスとして MyType
を実装しており、method()
メソッドも正しくオーバーライドしています。
A) public non-sealed class MyClass implements MyType { }
→ MyType
が sealed
なので、このクラスは non-sealed
であることは許可されません。
B) public abstract class MyClass implements MyType { public void method() { System.out.println("MyType::method"); } }
→ MyClass
は abstract
ですが、sealed
であるインターフェースに対して適切ではありません。
D) public class MyClass implements MyType { public void method() { System.out.println("MyType::method");} }
→ MyClass
は sealed
に関する制約に反します。
E) public abstract class MyClass implements MyType { }
→ MyClass
が abstract
なので、method()
を実装していないため不完全です。
F) public final class MyClass implements MyType { public void method() { System.out.println("MyType::method");} }
→ final
クラスは sealed
と矛盾します。sealed
クラスは final
ではありません。
対象資格:Java SE17 認定資格