自学内容网 自学内容网

【JAVA】Java基础—面向对象编程:继承—extends 关键字的使用

在Java编程中,extends关键字用于实现类之间的继承关系。继承是面向对象编程(OOP)的一个重要特性,它允许一个类(子类)继承另一个类(父类)的属性和方法。通过继承,子类不仅能够复用父类的代码,还可以扩展或修改其功能。

我们可以将extends关键字的使用比作家族关系。比如,一个孩子(子类)继承了父母(父类)的特征和能力。孩子不仅可以使用父母的能力(例如,语言能力),还可以发展出自己的特长(例如,音乐才能)。

一、extends关键字的基本概念

1. 基本语法

在Java中,使用extends关键字来定义一个类是如何继承另一个类的。基本语法如下:

class Parent {
    // 父类的属性和方法
}

class Child extends Parent {
    // 子类的属性和方法
}
2. 示例代码

我们通过一个简单的示例来说明extends关键字的使用。

示例

// 父类
class Vehicle {
    String brand; // 车辆品牌
    int speed; // 车辆速度

    // 父类构造方法
    public Vehicle(String brand, int speed) {
        this.brand = brand;
        this.speed = speed;
    }

    // 父类方法
    public void displayInfo() {
        System.out.println("Brand: " + brand + ", Speed: " + speed + " km/h");
    }
}

// 子类
class Car extends Vehicle {
    int doors; // 车门数量

    // 子类构造方法
    public Car(String brand, int speed, int doors) {
        super(brand, speed); // 调用父类构造方法
        this.doors = doors;
    }

    // 子类特有的方法
    public void displayCarInfo() {
        displayInfo(); // 调用父类方法
        System.out.println("Doors: " + doors);
    }
}

// 主类
public class Main {
    public static void main(String[] args) {
        Car car = new Car("Toyota", 120, 4); // 创建子类对象
        car.displayCarInfo(); // 调用子类的方法
    }
}

代码解释

  1. **父类 Vehicle**:

    • 定义了两个属性brand(车辆品牌)和speed(车辆速度)。

    • 构造方法用于初始化品牌和速度。

    • displayInfo()方法用于显示车辆信息。

  2. **子类 Car**:

    • 使用extends关键字继承Vehicle类。

    • 添加了一个特有属性doors(车门数量)。

    • 在构造方法中,使用super(brand, speed)调用父类的构造方法,以初始化继承的属性。

    • 定义了displayCarInfo()方法,调用父类的displayInfo()方法,并输出车门数量。

  3. **主类 Main**:

    • 创建Car类的对象car,并调用displayCarInfo()方法,展示了车辆的品牌、速度和车门数量。

二、extends关键字的特点

  1. 单继承:Java不支持多重继承,即一个类只能直接继承一个父类。这有助于避免复杂的继承关系和潜在的冲突。

  2. 构造方法:子类的构造方法必须调用父类的构造方法(使用super关键字),以确保父类的属性被正确初始化。

  3. 方法重写:子类可以重写父类的方法,以提供特定的实现。这种特性使得多态性得以实现。

三、方法重写示例

为了更深入地理解extends关键字的使用,我们来看一个方法重写的示例。

示例

// 父类
class Animal {
    public void sound() {
        System.out.println("Animal makes a sound.");
    }
}

// 子类
class Dog extends Animal {
    @Override // 注解,表示重写父类的方法
    public void sound() {
        System.out.println("Dog barks.");
    }
}

// 子类
class Cat extends Animal {
    @Override // 注解,表示重写父类的方法
    public void sound() {
        System.out.println("Cat meows.");
    }
}

// 主类
public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // 父类引用指向子类对象
        Animal myCat = new Cat(); // 父类引用指向子类对象

        myDog.sound(); // 调用Dog类中的重写方法
        myCat.sound(); // 调用Cat类中的重写方法
    }
}

代码解释

  1. **父类 Animal**:

    • 定义了一个方法sound(),输出“Animal makes a sound.”。

  2. **子类 Dog**:

    • 使用extends关键字继承Animal类。

    • 重写了sound()方法,输出“Dog barks.”。

  3. **子类 Cat**:

    • 同样继承Animal类,并重写sound()方法,输出“Cat meows.”。

  4. **主类 Main**:

    • 创建DogCat类的对象,分别赋值给Animal类型的引用。

    • 调用sound()方法时,实际上调用的是子类的重写方法,展示了多态性。


原文地址:https://blog.csdn.net/thinking_chou/article/details/143757498

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!