Java 委托与继承

Java 委托与继承

在Java编程中, 继承 是一个类接受另一个类的属性的过程。也就是说,新的类,被称为派生类或子类,接管先前存在的类的属性和行为,这些类被称为基类或超类或父类。

委托 是简单地把一个职责交给某人/某事。

  • 委托可以是继承的一种替代方式。
  • 委托意味着你使用另一个类的一个对象作为实例变量,并将消息转发给该实例。
  • 在许多情况下,它比继承更好,因为它让你考虑你转发的每一条消息,因为实例是一个已知的类,而不是一个新的类,还因为它不强迫你接受超类的所有方法:你可以只提供真正有意义的方法。
  • 委托可以被看作是对象之间的一种关系,其中一个对象将某些方法调用转发给另一个对象,称为其委托对象。
  • 委托的主要优点是运行时的灵活性–在运行时可以很容易地改变委托对象。但与继承不同的是,大多数流行的面向对象语言都不直接支持委托,而且它也不便于动态多态性。
// Java program to illustrate
// delegation
class RealPrinter {
    // the "delegate"
    void print()
    {
        System.out.println("The Delegate");
    }
}
 
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();
    }
}

输出:

The Delegate

当你委托时,你只是在调用一些知道必须做什么的类。你并不关心它是如何做的,你所关心的是,你所调用的类知道需要做什么。

使用继承的相同代码

// Java program to illustrate
// Inheritance
class RealPrinter {
    // base class implements method
    void print()
    {
        System.out.println("Printing Data");
    }
} 3 // Printer Inheriting functionality of real printer
    class Printer extends RealPrinter {
 
    void print()
    {
        super.print(); // inside calling method of parent
    }
}
 
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();
    }
}

输出:

Printing Data

什么时候使用什么?

以下是一些使用继承或委托的例子:

假设你的类叫B,派生/委托给的类叫A,那么 如果

  • 你想表达关系(is-a),那么你就想使用继承(Inheritance)。
  • 你想把你的类传递给一个期待A的现有API,那么你需要使用继承。
  • 你想增强A,但A是最终的,不能再被子类化,那么你需要使用组合和委托。
  • 你想要一个方法的功能,但不想覆盖该方法,那么你应该使用委托。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程