Java中继承和委托的区别是什么?
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(); } }
admin 更改状态以发布 2023年5月24日
当你委托时,你只是调用一个知道该做什么的类。你并不关心它是如何做的,你只关心你所调用的类知道需要做什么。\n\n如果我是你,我会创建一个接口,名为IPrinter
(或类似的名称),它有一个名为print
的方法。然后,我会让RealPrinter
实现这个接口。最后,我会把这一行代码:RealPrinter p = new RealPrinter();
改成这样:IPrinter p = new RealPrinter()
。\n\n因为RealPrinter
实现了IPrinter
,我就知道它确实有一个print
方法。然后我就可以使用这个方法将打印行为委托给适当的类。\n\n这通常允许更多的灵活性,因为你不会在你的特定类中嵌入行为,而是留给另一个类来处理。\n\n在这种情况下,要更改应用程序与打印有关的行为,你只需要创建另一个实现了IPrinter
的类,然后将这行代码:IPrinter p = new RealPrinter();
改为IPrinter p = new MyOtherPrinter();
。\n\n
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(); } }