模板方法调用 super 并使用实现
Template Method calling super and use implementation
我已经实现了模板方法,但我遇到了这种情况:
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....
}
}
我的疑问是..可以调用一个超级方法,如果在这个超级方法中有一个方法调用并且我重写了这个方法,class 将使用什么方法实现?
解决方案:好的,它工作正常。但是当我有一个 class 调用一个被覆盖的方法时,有这个没用吗:
public class SimpleProduct extends ProductTemplate(){
public processItemPrice(){
super.processItemPrice()
}
}
This ProductTemplate implements an interface, and is used within Strategy pattern.. is it right?
理解这类事情的最简单方法是将调试输出编码到您的代码中,看看会发生什么。
清理您的代码(以便编译)并添加一些打印:
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
class(现在可以,因为我添加了 main
方法),你将得到输出:
ImportedProduct.processItemPrice()
ProductTemplate.callOrderSummary()
表明确实调用了您子class中重写的方法。
注意:不需要像您那样重写 getItemFromShop
方法。它与覆盖的方法没有什么不同。
我已经实现了模板方法,但我遇到了这种情况:
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....
}
}
我的疑问是..可以调用一个超级方法,如果在这个超级方法中有一个方法调用并且我重写了这个方法,class 将使用什么方法实现?
解决方案:好的,它工作正常。但是当我有一个 class 调用一个被覆盖的方法时,有这个没用吗:
public class SimpleProduct extends ProductTemplate(){
public processItemPrice(){
super.processItemPrice()
}
}
This ProductTemplate implements an interface, and is used within Strategy pattern.. is it right?
理解这类事情的最简单方法是将调试输出编码到您的代码中,看看会发生什么。
清理您的代码(以便编译)并添加一些打印:
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
class(现在可以,因为我添加了 main
方法),你将得到输出:
ImportedProduct.processItemPrice()
ProductTemplate.callOrderSummary()
表明确实调用了您子class中重写的方法。
注意:不需要像您那样重写 getItemFromShop
方法。它与覆盖的方法没有什么不同。