请详细解释编程中的面向对象设计，并包含至少3个具体示例。例如继承、接口和多态。请以markdown格式输出。
user
```markdown
# 面向对象设计详解

面向对象设计（Object-Oriented Design，OOD）是一种程序设计范式，它将现实世界中的实体抽象为程序中的对象，并通过这些对象之间的交互来实现程序的功能。面向对象设计的核心概念包括类、对象、继承、接口和多态等。

## 1. 继承（Inheritance）

继承是面向对象设计中的一个重要概念，它允许一个类（子类）继承另一个类（父类）的属性和方法。通过继承，子类可以重用父类的代码，并在此基础上添加或修改功能。

**示例：**
```java
class Animal {
    void eat() {
        System.out.println("This animal eats food.");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("The dog barks.");
    }
}

Dog myDog = new Dog();
myDog.eat();  // 输出: This animal eats food.
myDog.bark(); // 输出: The dog barks.
```
在这个示例中，`Dog`类继承了`Animal`类，因此`Dog`对象可以调用`Animal`类的`eat()`方法。

## 2. 接口（Interface）

接口是一种抽象类型，它定义了一组方法的签名，但没有实现这些方法的具体代码。接口用于定义类必须实现的行为，从而实现多态性。

**示例：**
```java
interface Drawable {
    void draw();
}

class Circle implements Drawable {
    public void draw() {
        System.out.println("Drawing a circle.");
    }
}

class Rectangle implements Drawable {
    public void draw() {
        System.out.println("Drawing a rectangle.");
    }
}

Drawable circle = new Circle();
circle.draw();  // 输出: Drawing a circle.

Drawable rectangle = new Rectangle();
rectangle.draw();  // 输出: Drawing a rectangle.
```
在这个示例中，`Drawable`接口定义了一个`draw()`方法，`Circle`类和`Rectangle`类都实现了这个接口，并提供了各自的`draw()`方法实现。

## 3. 多态（Polymorphism）

多态是指同一操作作用于不同的对象时，可以有不同的解释和执行结果。多态性允许一个接口或基类的多种实现方式，增强了程序的灵活性和可扩展性。

**示例：**
```java
class Shape {
    void draw() {
        System.out.println("Drawing a shape.");
    }
}

class Circle extends Shape {
    void draw() {
        System.out.println("Drawing a circle.");
    }
}

class Rectangle extends Shape {
    void draw() {
        System.out.println("Drawing a rectangle.");
    }
}

public class Main {
    static void drawShape(Shape shape) {
        shape.draw();
    }

    public static void main(String[] args) {
        Shape circle = new Circle();
        Shape rectangle = new Rectangle();

        drawShape(circle);    // 输出: Drawing a circle.
        drawShape(rectangle); // 输出: Drawing a rectangle.
    }
}
```
在这个示例中，`drawShape()`方法可以接受任何`Shape`类型的对象，并调用其`draw()`方法。由于多态性，`Circle`和`Rectangle`对象都可以作为`Shape`对象传递给`drawShape()`方法，并执行各自特定的`draw()`方法。

## 总结

面向对象设计通过类、对象、继承、接口和多态等概念，提供了一种灵活且可扩展的程序设计方法。通过这些概念，程序员可以更容易地组织和管理复杂的代码结构。
```
assistant