📅  最后修改于: 2023-12-03 15:02:01.718000             🧑  作者: Mango
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类型的对象来使用。