Java 无法调用但可以覆盖的方法
Java method that can't be callable but can be overridden
如果我不希望我的 class 上的某个方法可以被调用,我只是将其设为私有。
但是如果我想让那个方法被覆盖,我必须让它受到保护
是否可以在抽象 class 上创建一个无法调用但可以覆盖的方法? (我猜不是,但是有什么解决方法吗?)
用例:
abstract class Super {
protected void finalize() {
}
public final void doThings() {
// do stuff
finalize();
}
}
以及任何想要扩展 class 的人:
class Sub extends Super {
@Override
protected void finalize() {
closeSockets();
alertSomeone();
}
}
但我不想让其他 class 打电话给 mySub.finalize()
;
sub-class 可以为 super-class 提供包含要执行的代码的 Runnable,而不是覆盖方法。你可以这样做:
public class Super {
private final Runnable subClassCode;
public Super(Runnable finalizeCode) {
subClassCode = finalizeCode;
}
public final void doThings() {
// do stuff
subClassCode.run();
}
}
public class Sub extends Super {
public Sub() {
super(() -> {
// code to be executed in doThings()
});
}
}
您不需要在构造函数中设置Runnable 实例。您还可以授予对受保护的 setFinalizeCode(Runnable) 方法的访问权限,但该方法也可以由与 Super.
相同包内的其他 classes 调用
如果我不希望我的 class 上的某个方法可以被调用,我只是将其设为私有。
但是如果我想让那个方法被覆盖,我必须让它受到保护
是否可以在抽象 class 上创建一个无法调用但可以覆盖的方法? (我猜不是,但是有什么解决方法吗?)
用例:
abstract class Super {
protected void finalize() {
}
public final void doThings() {
// do stuff
finalize();
}
}
以及任何想要扩展 class 的人:
class Sub extends Super {
@Override
protected void finalize() {
closeSockets();
alertSomeone();
}
}
但我不想让其他 class 打电话给 mySub.finalize()
;
sub-class 可以为 super-class 提供包含要执行的代码的 Runnable,而不是覆盖方法。你可以这样做:
public class Super {
private final Runnable subClassCode;
public Super(Runnable finalizeCode) {
subClassCode = finalizeCode;
}
public final void doThings() {
// do stuff
subClassCode.run();
}
}
public class Sub extends Super {
public Sub() {
super(() -> {
// code to be executed in doThings()
});
}
}
您不需要在构造函数中设置Runnable 实例。您还可以授予对受保护的 setFinalizeCode(Runnable) 方法的访问权限,但该方法也可以由与 Super.
相同包内的其他 classes 调用