gpt4 book ai didi

java - 重载和隐藏Java中的方法

转载 作者:太空狗 更新时间:2023-10-29 23:02:54 24 4
gpt4 key购买 nike

我有一个带有公共(public) insert() 方法的抽象类 BaseClass:

public abstract class BaseClass {

public void insert(Object object) {
// Do something
}

}

它被许多其他类扩展。然而,对于其中一些类,insert() 方法必须有额外的参数,这样它们就不会覆盖它,而是使用所需的参数重载基类的方法,例如:

public class SampleClass extends BaseClass {

public void insert(Object object, Long param){
// Do Something
}

}

现在,如果我实例化 SampleClass 类,我有两个 insert() 方法:

SampleClass sampleClass = new SampleClass();
sampleClass.insert(Object object);
sampleClass.insert(Object object, Long param);

我想做的是隐藏基类中定义的 insert() 方法,这样只有重载可见:

SampleClass sampleClass = new SampleClass();
sampleClass.insert(Object object, Long param);

这可以在 OOP 中完成吗?

最佳答案

无法隐藏该方法。你可以这样做:

@Override
public void insert(Object ob) {
throw new UnsupportedOperationException("not supported");
}

但仅此而已。

基类创建一个契约。所有子类都受该契约(Contract)约束。这样想:

BaseObject b = new SomeObjectWithoutInsert();
b.insert(...);

该代码如何知道它没有 insert(Object) 方法?不能。

您的问题听起来像是设计问题。有问题的类不应该从有问题的基类继承,或者该基类不应该有该方法。也许您可以从该类中取出 insert(),将其移动到一个子类中,让需要 insert(Object) 的类扩展它,而那些需要 insert 的类(Object, Object) 扩展基础对象的不同子类。

关于java - 重载和隐藏Java中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2589146/

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