查看原文
其他

一文搞懂Java面向对象编程中的继承机制

学研妹 Java学研大本营 2024-01-02

本文详细阐述Java面向对象编程的关键特性:继承。

长按关注《Java学研大本营》

Java是一种面向对象的编程语言,即它是围绕对象的概念设计的。以下是Java面向对象编程系统的一个关键特性:

1 继承

继承是Java面向对象编程系统的一个关键特性,它允许一个类从另一个类中继承属性和方法。这样可以实现代码复用并简化代码维护。本文将详细阐述Java中的继承概念。

2 继承的基础知识

在Java中,使用extends关键字实现继承。当一个类从另一个类继承时,它继承父类的所有非私有成员,包括字段,方法和嵌套类。

以下是一个简单的类层次结构示例:

class Vehicle {
  protected int speed;

  public void setSpeed(int speed) {
    this.speed = speed;
  }

  public void start() {
    System.out.println("Starting vehicle...");
  }
}

class Car extends Vehicle {
  private String model;

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

  public void drive() {
    System.out.println("Driving a " + model + " at " + speed + " mph");
  }
}

在此示例中,Vehicle类有一个名为speed的字段和两个方法,setSpeed和start。Car类扩展了Vehicle并添加了一个名为model的字段和一个名为drive的方法。

创建Car的实例时,它可以访问Vehicle和Car的字段和方法。

3 继承中的访问修饰符

当一个子类从父类继承成员时,子类中成员的访问级别不能比父类中的更严格。换句话说,父类中的私有成员不能从子类中访问。

以下表格显示了超类中成员的访问级别如何影响子类中的可访问性:

4 重写方法

继承还允许子类覆盖其超类中定义的方法。这意味着子类提供了自己的方法实现,而不是使用从超类继承的实现。

以下是方法重写的示例:

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

class Car extends Vehicle {
  @Override
  public void start() {
    System.out.println("Starting car...");
  }
}

在此示例中,Car类使用自己的实现重写Vehicle的start方法。

当重写一个方法时,在子类的实例上调用该方法时,将调用子类的实现而不是超类的实现。如果子类想要调用超类的方法实现,可以使用super关键字。

5 抽象类

在Java中,抽象类是一种不能被实例化且旨在被子类化的类。抽象类可以有抽象方法,这些方法被声明但未实现。抽象类的子类必须为其所有抽象方法提供实现。

以下是抽象类的示例:

abstract class Animal {
  protected String name;

  public Animal(String name) {
    this.name = name;
  }

  public abstract void makeSound();
}

class Dog extends Animal {
  public Dog(String name) {
    super(name);
  }

  @Override
  public void makeSound() {
    System.out.println(name + " barks");
  }
}

在此示例中,Animal类是一个带有抽象方法makeSound的抽象类。Dog类扩展了Animal并为makeSound方法提供了实现。

6 最终类和方法

在Java中,final关键字可用于防止类被子类化或方法被覆盖。final类不能被扩展,final方法不能被其子类覆盖。

以下是示例:

final class Vehicle {
  // ...
}

class Car extends Vehicle // Error: Cannot extend final class
  // ...
}

class Vehicle {
  public final void start() {
    // ...
  }
}

class Car extends Vehicle {
  @Override
  public void start() // Error: Cannot override final method
    // ...
  }
}

在这个示例中,Vehicle类被标记为final,因此它不能作为超类被子类化。Vehicle类中的start方法被标记为final,因此它不能被子类重写。

7 总结

继承是Java面向对象编程系统中的一个基本概念。它允许类从它们的父类中继承属性和方法,实现代码重用和创建类层次结构。Java支持单一继承,即一个类只能从一个超类继承;它也支持多层继承,即一个子类可以有它自己的子类。通过了解和有效地使用继承,可以以更模块化、可重用和可维护的方式设计和组织Java代码。

推荐书单

《Java语言程序设计(第3版)》

“十二五”普通高等教育本科国家级规划教材,畅销Java程序设计教材,已经被几百所高校选为教材。

本书第1版于2005年出版。第2版于2010年出版,是普通高等教育“十一五”国家级规划教材。第3版入选“十二五”高等教育本科国家级规划教材。 本书在介绍Java语言的同时,更注重Java语言的知识体系,系统性地分析了Java核心机制与基本原理。全书分为核心基础篇与应用技术篇。在核心基础篇中, 论述了面向对象程序设计的基本概念、Java语言基础(包括运算符与表达式、程序流控制、数组)、Java面向对象特性、异常处理方法、基于Swing的图形化用 户界面构造方法、输入/输出、Applet概念与应用。应用技术篇介绍了开发Java的高级应用技术,包括多线程、网络编程、JDBC数据库连接、J2EE技术、功能驱 动的Java程序开发方法以及Java编程规范。书中还提供了大量实例。 本书具有系统性、知识性、实用性等特点,可以作为大专院校教材,也可作为Java编程爱好者的参考书。

购买链接:https://item.jd.com/11949337.html

精彩回顾

用好这4个设计模式,完成Java中的大部分任务

5个Java开发者不可不知的编程库

FPGA具有什么强大的功能,竟然可以代替CPU和GPU?

5个强大的IntelliJ IDEA插件,提高你的生产力

6个Android开发者不可不知的设计模式

长按关注《Java学研大本营》
长按访问【IT今日热榜】,发现每日技术热点
继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存