Java中继承和委托的区别是什么?

16 浏览
0 Comments

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日
0
0 Comments

继承利用Java编译器的类型系统隐式地包含来自其他地方的代码,而委托则明确实现调用。

继承仅限于单个父类(和祖先),但有时可能不清楚您的代码将去哪里;委托不太优雅,但您可以从多个其他类中引入功能,并且流程清晰可见。

就调用外部函数而言,出于这个原因,通常更喜欢使用委托,继承应该保留用于您想要实现其行为与基础类相似的类的情况,因此它可以被其他代码视为基类的实例(即,它是多态的)。

0
0 Comments

当你委托时,你只是调用一个知道该做什么的类。你并不关心它是如何做的,你只关心你所调用的类知道需要做什么。\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();
    }
}

0