Java 面向对象 继承

Java 中的面向对象编程(OOP)是以类和对象为基础,使用继承、封装、多态等特性来设计和实现代码。继承是面向对象的一个重要概念,可以一个类从另一个类派生,继承其属性和方法。继承在 Java 中通过 extends 关键字实现。本文主要介绍Java 继承。

1、Java 继承 (子类 和 超类)

在Java中,可以将属性和方法从一个类继承到另一个类。 继承分为两类:

  • 子类(子类)-从另一个类继承的类
  • 超类(父级)-继承自的类

要从类继承,使用extends关键字。

在下面的示例中,Student类(子类)继承了People类(超类)的属性和方法:

例如:

class People {
  protected String name = "cjavapy";        // People 属性
  public void study() {                    // People 方法
    System.out.println("好好学习");
  }
}

class Student extends People {
  private String className = "Python";    // Student 属性
  public static void main(String[] args) {

    // 创建 student 对象
    Student student = new Student();

    // 调用student的study() 方法 (从 People 类继承) student 
    student.study();

    // 显示name属性(从 People 类继承)的值和Student类的className的值
    System.out.println(student.name + " " + student.className);
  }
} 

People中的protected修饰符,我们将People中的name属性设置为受protected限制的访问修饰符。如果将其设置为private,则Student类将无法访问它。

继承对于代码可重用性很有用:重用创建新类时,请使用现有类的属性和方法。

2、final 关键字

如果不希望其他类继承自一个类,请使用final关键字:

如果尝试访问final类,则Java将生成错误:

final class People {
  ...
}

class Student extends People {
  ...
}

相关文档Java 封装

3、继承的好处

Java 中继承(Inheritance)是面向对象编程的核心特性之一,具有多个重要的好处,能够帮助开发者提高代码的复用性、可维护性、扩展性等。

1)代码复用

继承使得子类能够复用父类已有的代码(属性和方法),避免了重复编写相同的代码。如果多个类有相似的功能或属性(如动物类中所有动物都有 namespeak() 方法),可以将这些通用的代码放到父类中,子类直接继承父类即可复用这些代码。

class Animal {
    String name;
    
    public void speak() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    public void fetch() {
        System.out.println("Dog fetches the ball");
    }
}

2)简化代码结构

继承有助于简化代码结构。通过继承,将公共的功能和属性提取到父类中,减少了代码的冗余。如果所有动物类都需要 name 属性和 speak() 方法,那么可以将它们放在 Animal 父类中,然后不同种类的动物类只需继承 Animal 类即可,避免重复定义相同的属性和方法。

class Bird extends Animal {
    public void fly() {
        System.out.println("Bird is flying");
    }
}

3)提高可维护性

承有助于减少重复代码,使得修改和维护变得更加容易。修改父类中的逻辑时,子类会自动继承最新的更改,从而避免了多次修改相同代码。如果在父类中修复了某个通用的 bug,所有子类都可以自动获得修复后的代码,无需在每个子类中单独修改。

class Vehicle {
    public void start() {
        System.out.println("Vehicle started");
    }
}

class Car extends Vehicle {
    public void start() {
        System.out.println("Car started with engine");
    }
}

class Bike extends Vehicle {
    public void start() {
        System.out.println("Bike started with pedal");
    }
}

4)扩展性

继承允许开发者在不修改已有代码的基础上,扩展和增强已有的功能。这种扩展性是实现系统功能增长而不破坏现有功能的关键。如果你有一个 Shape 类,并且后续需要添加不同形状(如圆形、矩形等)的类,可以通过继承 Shape 类来扩展新功能。

class Shape {
    public void draw() {
        System.out.println("Drawing shape");
    }
}

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

5)多态支持

继承是实现多态的基础,允许父类引用指向子类对象。通过方法重写(Override),子类可以改变父类方法的实现,而不改变调用代码。可以通过父类引用来调用不同子类的具体实现,从而动态地选择调用的版本。

注意:Java 只支持单继承,即一个类只能有一个直接父类,不能同时继承多个类

推荐阅读
cjavapy编程之路首页