mke*_*erz 7 java sealed-class java-15 java-sealed-type
我有以下密封接口(Java 15):
public sealed interface Animal permits Cat, Duck {
String makeSound();
}
Run Code Online (Sandbox Code Playgroud)
该接口由 2 个类实现:
public final class Cat implements Animal {
@Override
public String makeSound() {
return "miau";
}
}
public non-sealed class Duck implements Animal {
@Override
public String makeSound() {
return "quack";
}
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我之间的差异final和non-sealed?final阻止我创建其他子类,但什么行为non-sealed适用于Duck?
aku*_*ykh 10
Cat为final,没有其他类可以扩展Cat。Duck为non-sealed,任何类都可以扩展Duck。当标记一个类为sealed,所有直接扩展类(后的那些permits子句)必须被无论是作为标记final,sealed或non-sealed:
将扩展sealed类的类标记为sealed,对其应用相同的效果:只有在permits子句之后指定的类才允许扩展它。
non-sealed只是“打破封印”,所以效果不必在层次结构中向下传递。扩展类是开放的(再次)被未知子类本身扩展。
final是有效的一样sealed没有经过指定的任何类的permits条款。请注意,permits不可能在之后指定任何内容,因此sealed不能替换final。
| 归档时间: |
|
| 查看次数: |
607 次 |
| 最近记录: |