gpt4 book ai didi

java - 阴影还是实现?

转载 作者:搜寻专家 更新时间:2023-11-01 03:24:50 25 4
gpt4 key购买 nike

public class SuperClass {
public void doFoo() {
//...
}
}

public class SubClass extends SuperClass implements AnInterface {}

public interface AnInterface {
public abstract void doFoo();
}

为什么 SubClass 不必实现 doFoo() 方法?我想这是因为它已经在它的父类(super class)中了。但是我不能为 SuperClass 中的 doFoo() 方法添加一个 @Override。所以它被遮蔽了?或者那叫什么?这是一个好的/正常的做法吗?

最佳答案

Why does SubClass don't have to implement the doFoo() method?

因为它已经在 SuperClass 中实现了。

But I can't add a @Override for the doFoo() method in SuperClass.

不,你不能,因为 SuperClass 没有实现 AnInterface。它不会覆盖任何人的方法。

So it is shadowed?

没有。阴影是另一回事。它关注变量。所以,如果 SuperClass 有一个变量 foo,并且在 SubClass 中你尝试定义一个同名的变量,那将是 shadowing 。这没有名字。

And is this a good/normal practice?

这是正常做法。我在许多大型项目中多次看到它。



TLDR 示例如下:

假设我们有一个实现 ModelBasedWizard 所需的接口(interface)(向导在许多桌面应用程序中很常见)。

public interface IModelBasedWizard {

public void addWizardPage(IWizardPage page);

public IStatus getWizardStatus();

public void bindModel(IModel model);
}

假设已经有一个向导的实现

public class Wizard {

public void addWizardPage(IWizardPage page) {
pages.add(page);
page.createContent(this);
}

public IStatus getWizardStatus() {
List<IStatus> stati= new ArrayList<Status>();
for (IWizardPage page : pages) {
stati.add(page.getStatus());
}
return stati;
}
}

现在,这只是向导的可视化部分,但它对模型一无所知。好的,没问题:

public class ModelBasedWizard extends Wizard implements IModelBasedWizard {
//UI, pages, stati and all other functionalities are already implemented.
//I just need to bind this wizard to a model

//create some content here

@Override
public void bindModel(IModel model) {
this.model = model;
this.fieldOne.bindToModel(model);
model.addPropertyChangeListener(new PropertyChangeListener() {
//bla bla
});
}
}

关于java - 阴影还是实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17323473/

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