java中继承与委派有什么区别
java中的继承和委托有什么区别?
如何在我的项目中使用以下示例?请你指导我。我了解继承,但对委托没有太多了解。因此,请给出适当的理由。我为什么要用这个?
package com.m; class RealPrinter { // the "delegate"
void print() {
System.out.println("something");
}
}
class Printer { // the "delegator"
RealPrinter p = new RealPrinter(); // create the delegate
void print() {
p.print(); // delegation
}
}
public class Tester {
// to the outside world it looks like Printer actually prints.
public static void main(String[] args) {
Printer printer = new Printer();
printer.print();
}
}
回答:
当您委托时,您只是在调用一个知道必须做什么的类。您并不真正在乎它是 如何 执行的,您所 关心的 只是您正在调用的类知道需要做什么。
如果我是您,我将创建一个接口并命名该接口IPrinter
(或类似名称的接口),该接口具有一个名为的方法print
。然后,我将RealPrinter
实现此接口。最后,我将这一行:更改RealPrinter
p = new RealPrinter();为:IPrinter p = new RealPrinter()
。
既然RealPrinter
实现了IPrinter
,那么我肯定知道它有一个print
方法。然后,我可以通过将其委托给适当的类来使用此方法来更改应用程序的打印行为。
这通常可以提供更大的灵活性,因为您无需将行为嵌入到特定的类中,而是将其留给另一个类。
在这种情况下,要更改应用程序在打印方面的行为,您只需要创建另一个实现的类,IPrinter
然后将以下行更改IPrinter p = new
RealPrinter();为即可IPrinter p = new MyOtherPrinter();
。
public interface IPrinter { void print();
}
public class RealPrinter implements IPrinter {
@Override
public void print() {
System.out.println("This is RealPrinter");
}
}
public class RealPrinter2 implements IPrinter {
@Override
public void print() {
System.out.println("This is RealPrinter2");
}
}
public class Main {
public static void main(String...arg){
IPrinter printer = new RealPrinter();
printer.print();
printer = new RealPrinter2();
printer.print();
}
}
以上是 java中继承与委派有什么区别 的全部内容, 来源链接: utcz.com/qa/420238.html