📜  Java中的委托与继承(1)

📅  最后修改于: 2023-12-03 15:02:01.718000             🧑  作者: Mango

Java中的委托与继承

Java中的委托和继承是两种不同的面向对象编程的实现方式。委托是对象之间通信的一种方式,通过委托,一个对象可以将任务交给另一个对象来完成。而继承则是通过基类和派生类的关系来实现代码的复用。

委托

在Java中,委托是通过接口来实现的。一个类可以实现一个或多个接口,并将任务委托给实现了这些接口的其他类来完成。以下是一个简单的委托示例:

public interface Printer {
    void print(String message);
}

public class ConsolePrinter implements Printer {
    @Override
    public void print(String message) {
        System.out.println(message);
    }
}

public class PrinterClient {
    private Printer printer;

    public PrinterClient(Printer printer) {
        this.printer = printer;
    }

    public void printMessage(String message) {
        printer.print(message);
    }
}

public class Main {
    public static void main(String[] args) {
        Printer printer = new ConsolePrinter();
        PrinterClient client = new PrinterClient(printer);
        client.printMessage("Hello, world!");
    }
}

在上述示例中,Printer是一个接口,定义了打印方法。ConsolePrinter是Printer接口的一个实现,负责将消息输出到控制台。PrinterClient是一个使用了委托的类,可以通过构造函数传入一个实现了Printer接口的类,并将打印任务委托给该类完成。

在Main函数中,我们首先实例化了一个ConsolePrinter对象,然后将它传入到PrinterClient的构造函数中。最后,我们调用printMessage方法,该方法将打印任务委托给了ConsolePrinter对象。

继承

继承是面向对象编程中最常用的实现方式之一。通过继承,派生类可以复用基类的代码,并添加自己的实现。

以下是一个简单的继承示例:

public class Animal {
    private String name;

    public Animal(String name) {
        this.name = name;
    }

    public void speak() {
        System.out.println(name + " speaks");
    }
}

public class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }

    @Override
    public void speak() {
        System.out.println(super.getName() + " meows");
    }
}

public class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    @Override
    public void speak() {
        System.out.println(super.getName() + " barks");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal cat = new Cat("Fluffy");
        Animal dog = new Dog("Buddy");

        cat.speak();
        dog.speak();
    }
}

在上述示例中,Animal是一个基类,定义了一个私有字段name和一个公共方法speak。Cat和Dog是Animal的派生类,通过继承Animal类的方法,使它们也拥有了name字段和speak方法。然后我们重载了speak方法,使得Cat和Dog的speak方法分别输出了它们自己的声音。

在Main函数中,我们实例化了一个Cat对象和一个Dog对象,并调用了它们的speak方法。由于Cat和Dog都是Animal的派生类,它们都可以作为Animal类型的对象来使用。