一、选择题：
CAAAA
二、编程题
1.创建一个接口 Shape，其中包含一个抽象方法 calculateArea()，用于计算图形的面积。然后创建两个类 Rectangle（矩形）和 Circle（圆形），它们都实现 Shape 接口。Rectangle 类有 length（长）和 width（宽）两个属性，Circle 类有一个 radius（半径）属性。分别实现它们的 calculateArea() 方法来计算各自的面积
// 定义接口Shape
interface Shape {
    double calculateArea();
}

// Rectangle类实现Shape接口
class Rectangle implements Shape {
    private double length;
    private double width;

    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    @Override
    public double calculateArea() {
        return length * width;
    }
}

// Circle类实现Shape接口
class Circle implements Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    @Override
    public double calculateArea() {
        return Math.PI * radius * radius;
    }
}

2. 创建一个父类 Animal，包含一个方法 makeSound()，该方法打印出动物发出的声音。然后创建两个子类 Dog（狗）和 Cat（猫），它们继承自 Animal 类，并分别重写 makeSound() 方法，使其打印出狗和猫的叫声。
// 父类Animal
class Animal {
    public void makeSound() {
        System.out.println("动物发出声音");
    }
}

// Dog类继承Animal类
class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("汪汪汪");
    }
}

// Cat类继承Animal类
class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("喵喵喵");
    }
}

3. 创建一个接口 Vehicle，其中包含一个方法 start()，用于启动车辆。然后创建一个类 Car（汽车），它继承自一个抽象类 AbstractVehicle，AbstractVehicle 实现了 Vehicle 接口。Car 类有一个属性 brand（品牌）。在 Car 类中实现 start() 方法，使其打印出汽车的品牌和启动信息。

// 定义接口Vehicle
interface Vehicle {
    void start();
}

// 抽象类AbstractVehicle实现Vehicle接口
abstract class AbstractVehicle implements Vehicle {
    @Override
    public void start() {
        System.out.println("车辆启动");
    }
}

// Car类继承AbstractVehicle类
class Car extends AbstractVehicle {
    private String brand;

    public Car(String brand) {
        this.brand = brand;
    }

    @Override
    public void start() {
        System.out.println(brand + "汽车启动");
    }
}
4. 创建一个接口 Movable，其中包含一个方法 move()，用于描述物体的移动行为。然后创建一个类 Human（人），它实现 Movable 接口，并实现 move() 方法，使其打印出人行走的信息。再创建一个类 Car（汽车，和题目 3 中的 Car 类不同），它也实现 Movable 接口，并实现 move() 方法，使其打印出汽车行驶的信息。最后创建一个测试类，创建 Human 和 Car 的对象，并调用它们的 move() 方法。

// 定义接口Movable
interface Movable {
    void move();
}

// Human类实现Movable接口
class Human implements Movable {
    @Override
    public void move() {
        System.out.println("人在行走");
    }
}

// Car类实现Movable接口
class Car implements Movable {
    @Override
    public void move() {
        System.out.println("汽车在行驶");
    }
}

// 测试类
public class Test {
    public static void main(String[] args) {
        Human human = new Human();
        Car car = new Car();
        human.move();
        car.move();
    }
}

5. 创建一个父类 Employee（员工），包含属性 name（姓名）和 salary（工资），以及一个方法 displayInfo()，用于显示员工的信息。然后创建两个子类 Manager（经理）和 Programmer（程序员），它们继承自 Employee 类。Manager 类有一个额外的属性 bonus（奖金），Programmer 类有一个额外的属性 skills（技能）。分别在两个子类中重写 displayInfo() 方法，使其除了显示父类的信息外，还能显示各自的额外信息。
// 父类Employee
class Employee {
    private String name;
    private double salary;

    public Employee(String name, double salary) {
        this.name = name;
        this.salary = salary;
    }

    public void displayInfo() {
        System.out.println("姓名：" + name + ", 工资：" + salary);
    }
}

// Manager类继承Employee类
class Manager extends Employee {
    private double bonus;

    public Manager(String name, double salary, double bonus) {
        super(name, salary);
        this.bonus = bonus;
    }

    @Override
    public void displayInfo() {
        super.displayInfo();
        System.out.println("奖金：" + bonus);
    }
}

// Programmer类继承Employee类
class Programmer extends Employee {
    private String skills;

    public Programmer(String name, double salary, String skills) {
        super(name, salary);
        this.skills = skills;
    }

    @Override
    public void displayInfo() {
        super.displayInfo();
        System.out.println("技能：" + skills);
    }
}