[Java 基础]面向对象-继承

news2025/6/7 0:21:44

继承,可以理解为和现实生活中的继承是一样的概念,比如:儿子继承了父亲的一些特性,面貌、身材、性格等。

在面向对象编程中,继承的概念与之类似。它允许我们创建一个新的类(子类 或 派生类),该类可以自动拥有另一个已经存在的类(父类 或 超类 或 基类)的属性(成员变量)和行为(成员方法)。子类可以在继承父类的基础上,添加自己特有的属性和行为,或者修改父类的行为。
继承的主要目的:

  1. 代码重用 (Code Reusability): 子类可以直接使用父类中已经定义好的属性和方法,避免了重复编写相同的代码,提高了开发效率。

建立类层次结构 (Establishing Class Hierarchy): 继承可以创建一种“is-a”(是一个)的关系,将相关的类组织成一个层次结构,使得程序结构更加清晰和易于理解。例如,“狗”是一个“动物”,“猫”也是一个“动物”,它们都继承了“动物”的一些通用特征。

  1. 提高代码的可维护性 (Maintainability): 当父类的属性或方法需要修改时,所有继承自该父类的子类也会自动继承这些修改。这简化了代码的维护工作。
  2. 实现多态性 (Polymorphism) 的基础: 继承是实现多态性的前提条件之一,多态性允许我们以统一的方式处理不同类型的对象。

如何在 Java 中实现继承?

在 Java 中,我们使用 extends 关键字来实现类的继承。语法如下:

class 子类名 extends 父类名 {
    // 子类自己的属性和方法
}

关键概念:

  • 父类 (Superclass/Base Class): 被继承的类
  • 子类 (Subclass/Derived Class): 继承父类的类
  • extends 关键字: 用于声明一个类继承另一个类
  • 继承关系是单向的: 子类可以继承父类的成员,但父类不能继承子类的成员
  • Java 只支持单继承: 一个类只能直接继承一个父类。但是,一个类可以实现多个接口(接口我们后面会学习)
  • 继承的内容: 子类会继承父类中非 private 的属性和方法。private 的成员只能在父类内部访问,子类无法直接访问
  • 构造方法不能被继承: 但是,子类的构造方法可以通过 super() 关键字调用父类的构造方法

代码示例:Animal 类和 Dog 类

让我们创建一个 Animal 类作为父类,然后创建一个 Dog 类作为 Animal 的子类来演示继承的概念:

// 父类:Animal
public class Animal {
    String name;
    int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("Animal 的构造方法被调用。");
    }

    public void eat() {
        System.out.println(name + " 正在吃东西。");
    }

    public void sleep() {
        System.out.println(name + " 正在睡觉。");
    }
}

// 子类:Dog,继承自 Animal
public class Dog extends Animal {
    String breed; // 狗特有的属性

    public Dog(String name, int age, String breed) {
        super(name, age); // 调用父类的构造方法初始化 name 和 age
        this.breed = breed;
        System.out.println("Dog 的构造方法被调用。");
    }

    public void bark() {
        System.out.println(name + " 正在汪汪叫!");
    }

    // 重写父类的 eat() 方法(Override)
    @Override
    public void eat() {
        System.out.println(name + " 这只 " + breed + " 正在啃骨头。");
    }

    public static void main(String[] args) {
        Dog myDog = new Dog("旺财", 3, "金毛");

        // 子类继承了父类的属性和方法
        System.out.println("名字:" + myDog.name);
        System.out.println("年龄:" + myDog.age);
        myDog.eat();   // 调用子类重写后的 eat() 方法
        myDog.sleep(); // 调用父类的 sleep() 方法

        // 子类自己特有的属性和方法
        System.out.println("品种:" + myDog.breed);
        myDog.bark();
    }
}

继承是面向对象编程中实现代码重用和构建类层次结构的重要手段。通过 extends 关键字,子类可以继承父类的非私有成员,并在此基础上扩展自己的功能。合理地使用继承可以使我们的代码更加简洁、易于维护和扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2400810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

编译一个Mac M系列可以用的yuview

做音视频的有一个神器工具YUView,具体使用和它的功能可以看:https://zhuanlan.zhihu.com/p/558580168, 这个作者讲得很清楚,但是官方只提供了intel的版本,arm版本要自己编,且依赖低版本的ffmpeg。 操作过程…

rabbitmq Topic交换机简介

1. Topic交换机 说明 尽管使用 direct 交换机改进了我们的系统,但是它仍然存在局限性——比方说我们的交换机绑定了多个不同的routingKey,在direct模式中虽然能做到有选择性地接收日志,但是它的选择性是单一的,就是说我的一条消息…

网络交换机:构建高效、安全、灵活局域网的基石

在数字化时代,网络交换机作为局域网(LAN)的核心设备,承担着数据转发、通信优化和安全防护的关键任务。其通过独特的MAC地址学习、冲突域隔离、VLAN划分等技术,显著提升了网络性能,成为企业、学校、医院等场景不可或缺的基础设施。…

【Oracle】存储过程

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 存储过程基础概述1.1 存储过程的概念与特点1.2 存储过程的组成结构1.3 存储过程的优势 2. 基础存储过程2.1 简单存储过程2.1.1 创建第一个存储过程2.1.2 带变量的存储过程 2.2 带参数的存储过程2.2.1 输入参…

单元测试-断言常见注解

目录 1.断言 2.常见注解 3.依赖范围 1.断言 断言练习 package com.gdcp;import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test;//测试类 public class UserServiceTest {Testpublic void testGetGender(){UserService userService new UserService…

TDengine 在电力行业如何使用 AI ?

在你面前摆着一堆机器运行日志、传感器读数、电表数据,几十万、几百万条每秒增长的数据流,你会怎么处理?是加人、加脚本,还是干脆放弃实时分析? 过去,时序数据是工业的“副产品”:只是存着、查…

OpenCV C/C++ 视频播放器 (支持调速和进度控制)

OpenCV C/C 视频播放器 (支持调速和进度控制) 本文将引导你使用 C 和 OpenCV 库创建一个功能稍复杂的视频播放器。该播放器不仅能播放视频,还允许用户通过滑动条来调整播放速度(加速/减速)以及控制视频的播放进度。 使用opencv打开不会压缩画…

【Linux庖丁解牛】—自定义shell的编写!

1. 打印命令行提示符 在我们使用系统提供的shell时,每次都会打印出一行字符串,这其实就是命令行提示符,那我们自定义的shell当然也需要这一行字符串。 这一行字符串包含用户名,主机名,当前工作路径,所以&a…

Linux运维笔记:1010实验室电脑资源规范使用指南

文章目录 一. 检查资源使用情况,避免冲突1. 检查在线用户2. 检查 CPU 使用情况3. 检查 GPU 使用情况4. 协作建议 二. 备份重要文件和数据三. 定期清理硬盘空间四. 退出 ThinLinc 时注销,释放内存五. 校外使用时配置 VPN注意事项 总结 实验室的电脑配备了…

【Docker 从入门到实战全攻略(二):核心概念 + 命令详解 + 部署案例】

5. Docker Compose Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个 YAML 文件来配置应用服务,然后使用一个命令即可创建并启动所有服务。 基本命令 docker-compose up # 创建并启动所有服务 docker-compose down # 停止并移除容器、网络等…

【conda配置深度学习环境】

好的!我们从头开始配置一个基于Conda的虚拟环境,覆盖深度学习(如PyTorch)和传统机器学习(如XGBoost),并适配你的显卡(假设为NVIDIA,若为AMD请告知)。以下是完…

力扣4.寻找两个正序数组的中位数

文章目录 题目介绍题解 题目介绍 题解 题解链接:题解 核心思路:通过二分查找的确定分割点使左右两部分元素数量相等。 class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {int n1 nums1.length;int n2 nums2.length…

【相机基础知识与物体检测】更新中

参考: 黑马机器人 | 相机标定&物体检测https://robot.czxy.com/docs/camera/ 01-相机基础 相机基础概述 相机是机器视觉的基础,相机直接产生了相机数据。所有视觉算法都是作用在相机数据上的。相机数据的好坏,或者对相机数据的理解方式…

【前端】性能优化和分类

本页知识点参考:https://zhuanlan.zhihu.com/p/514222781 1. 加载性能优化 1.1 网站性能优化 content方法: 1)减少HTTP请求:合并文件,CSS精灵,inline Image 2)减少DNS查询:DNS缓存&…

PPO和GRPO算法

verl 是现在非常火的 rl 框架,而且已经支持了多个 rl 算法(ppo、grpo 等等)。 过去对 rl 的理解很粗浅(只知道有好多个角色,有的更新权重,有的不更新),也曾硬着头皮看了一些论文和知…

rk3588 上运行smolvlm-realtime-webcam,将视频转为文字描述

smolvlm-realtime-webcam 是一个开源项目,结合了轻量级多模态模型 SmolVLM 和本地推理引擎 llama.cpp,能够在本地实时处理摄像头视频流,生成自然语言描述, 开源项目地址 https://github.com/ngxson/smolvlm-realtime-webcamhttps…

Rust 学习笔记:Box<T>

Rust 学习笔记&#xff1a;Box Rust 学习笔记&#xff1a;Box<T\>Box\<T> 简介使用 Box\<T\> 在堆上存储数据启用带有 box 的递归类型关于 cons 列表的介绍计算非递归类型的大小使用 Box\<T\> 获取大小已知的递归类型 Rust 学习笔记&#xff1a;Box<…

操作系统学习(十三)——Linux

一、Linux Linux 是一种类 Unix 的自由开源操作系统内核&#xff0c;由芬兰人 Linus Torvalds 于 1991 年首次发布。如今它广泛应用于服务器、桌面、嵌入式设备、移动设备&#xff08;如 Android&#xff09;等领域。 设计思想&#xff1a; 原则描述模块化与可移植性Linux 内…