我已经实施了模板方法,我遇到了这种情况:
public class ProductTemplate() {
protected Item getItemFromShop(){
processItemPrice();
callOrderSummary();
}
protected void processItemPrice() {
Do some logic....
}
protected void callOrderSummary()
Do some logic....
}
}
public class ImportedProduct extends ProductTemplate() {
@Override
protected Item getItemFromShop() {
super.getItemFromShop(); // When i call this super method, they will use the processItemPrice() from the implementation
}
@Override
protected void processItemPrice() {
Do another logic....
}
}
我怀疑是..可以调用一个超级方法,如果在这个超级方法中有一个方法调用并且我重写了这个方法,那么该类将使用哪种方法实现?
解决方案:好的它工作正常。但是当我有一个类调用一个方法被覆盖时,它是否无用有这个:
public class SimpleProduct extends ProductTemplate(){
public processItemPrice(){
super.processItemPrice()
}
}
This ProductTemplate implements an interface, and is used within Strategy pattern.. is it right?
答案 0 :(得分:2)
理解此类事情的最简单方法是将调试打印编码到代码中,看看会发生什么。
清理代码(以便编译)并添加一些打印件:
public class ProductTemplate {
protected Item getItemFromShop() {
processItemPrice();
callOrderSummary();
return null;
}
protected void processItemPrice() {
// Do some logic....
System.out.println("ProductTemplate.processItemPrice()");
}
protected void callOrderSummary() {
// Do some logic....
System.out.println("ProductTemplate.callOrderSummary()");
}
}
public class ImportedProduct extends ProductTemplate {
@Override
protected Item getItemFromShop() {
return super.getItemFromShop(); // When i call this super method, they will use the processItemPrice() from the implementation
}
@Override
protected void processItemPrice() {
// Do another logic....
System.out.println("ImportedProduct.processItemPrice()");
}
public static void main(String[] args) {
new ImportedProduct().getItemFromShop();
}
}
如果您运行ImportedProduct
类(现在因为我添加了main
方法而可行),您将获得输出:
ImportedProduct.processItemPrice()
ProductTemplate.callOrderSummary()
显示确实调用了子类中的重写方法。
注意:无需像您一样覆盖getItemFromShop
方法。它与被覆盖的方法没什么不同。