gpt4 book ai didi

无法调用但可以重写的 Java 方法

转载 作者:行者123 更新时间:2023-12-02 02:38:53 24 4
gpt4 key购买 nike

如果我不希望调用我的类上的方法,我只需将其设为私有(private)即可。

但是如果我想允许该方法被覆盖,我必须将其设置为 protected

抽象类上是否可以有一个无法调用但可以重写的方法? (我想不是,但是有什么解决方法吗?)

用例:

abstract class Super {

protected void finalize() {

}

public final void doThings() {
// do stuff
finalize();
}
}

以及想要扩展类(class)的人:

class Sub extends Super {

@Override
protected void finalize() {
closeSockets();
alertSomeone();
}

}

但我不希望其他类调用 mySub.finalize();

最佳答案

子类可以向父类(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 实例。您还可以授予对 protected setFinalizeCode(Runnable) 方法的访问权限,但该方法也可以由与 Super 相同的包中的其他类调用。

关于无法调用但可以重写的 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45820795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com