【Java 学习】面向程序的三大特性:封装、继承、多态

引言

在面向对象编程的世界里,封装、继承和多态构成了核心的三大特性。本文将深入探讨这些概念,并通过Java代码示例来阐释它们的重要性和实际应用。

1. 封装

1.1 什么是封装呢?

封装是一种隐藏对象的内部状态和复杂性,只对外暴露有限接口的设计原则。就像我们日常使用的电子产品,它们将复杂的内部结构封装起来,只展示用户需要操作的部分。

封装示意图
封装示意图

在Java中,封装通过访问限定符实现,它控制着类成员的可见性和访问级别。

1.2 访问限定符

范围 private default protected public
同一包内
同一包不同类
不同包子类
不同包非子类
  • public:对所有类可见。
  • protected:对同一包内的类和所有子类可见。
  • default:对同一包内的类可见。
  • private:仅对定义它的类可见。

1.3 使用封装

下面是一个Watch类的示例,展示了如何使用封装来隐藏和保护类的内部状态。

package cn.nyist.watch;

public class Watch {
    private String machine; // 动力来源
    public String time; // 时间
    String brand; // 品牌,default

    public Watch(String machine, String time, String brand) {
        this.machine = machine;
        this.time = time;
        this.brand = brand;
    }

    public void seeTime() {
        System.out.println("时间");
    }

    private void debug() {
        System.out.println("调试零件");
    }
}

Watch类中,main函数模拟了手表的创造者,可以访问所有成员:

public static void main(String[] args) {
    Watch w = new Watch("机械", "12:00", "劳力士");
    System.out.println(w.machine);
    System.out.println(w.time);
    System.out.println(w.brand);
    w.seeTime();
    w.debug();
}

而在Buy类中,模拟了手表的购买者,只能访问公共成员:

package cn.nyist.watch;

public class Buy {
    public static void main(String[] args) {
        Watch w = new Watch("机械", "12:00", "劳力士");
        System.out.println(w.time); // time是public属性
        System.out.println(w.brand); // brand是default属性
        w.seeTime(); // seeTime是public属性
    }
}

在其他包中的People类,只能访问Watch类的公共成员:

public class People {
    public static void main(String[] args) {
        Watch w = new Watch("机械", "12:00", "劳力士");
        System.out.println(w.time); // time是public属性
        w.seeTime(); // seeTime是public属性
    }
}

2. 继承

2.1 为什么要有继承?

继承允许我们创建新的类,这些新类可以继承现有类的属性和方法,从而避免代码冗余,并实现代码复用。

package cn.nyist.animal;

public class Dog {
    public String name;
    public String color;
    protected int age;

    public Dog(String name, String color, int age) {
        this.name = name;
        this.color = color;
        this.age = age;
    }

    public void eat() {
        System.out.println("吃饭~");
    }

    public void sleep() {
        System.out.println("睡觉~");
    }

    public void bark() {
        System.out.println("汪汪~");
    }
}

```java
package cn.nyist.animal;

public class Cat {
public String name;
public String color;
protected int age;

public Cat

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4552.html

(0)
LomuLomu
上一篇 2024 年 12 月 27 日
下一篇 2024 年 12 月 27 日

相关推荐

  • 2025新春源码免费送

    我们常常在日常生活中感到时间过得异常缓慢,仿佛未来遥不可及。然而,当我们回过头去审视过去,才发现时间早已悄然溜走,许多曾经等待的日子已经过去。时间总是在不经意间流逝,让人意识到它的宝贵和不可逆转。 尽管如此,我们依然应对未来保持从容的态度。生活充满了无数的可能性,未来依然充满了希望与机会。无论眼前的路看似如何曲折,抑或我们面临的挑战有多大,始终相信自己能够把…

    2025 年 1 月 10 日
    42400
  • 网站动静加速架构 dcdn+ga 全站加速和全球加速api

    # 背景 我们的公司提供的所有服务均位于香港,这意味着我们的客户,主要分布在中国内地,访问这些服务时可能会遇到速度较慢的问题。由于我们专注于NFT领域,因此选择在香港提供服务。 # 一、加速策略 ## 1.1 静态资源加速 静态资源加速是指对如HTML、JavaScript、CSS和图像文件等静态文件的快速分发。利用云服务提供商的CDN服务,我们可以有效地提…

    未分类 2024 年 12 月 24 日
    44900
  • 手动部署前后端分离的项目到本地

    1.准备工作 使用maven打包springboot项目为.jar文件得到springboot-0.0.1-SNAPSHOT.jar 打包vue项目 npm install -g @vue/cli安装Vue CLI 在项目根目录下,运行npm run build命令来构建项目得到一个dist文件夹 将打包好的文件通过远程仓库中转至docker虚拟机 在虚拟机…

    2025 年 1 月 11 日
    40100
  • MySQL 安装部署

    概述 本文主要介绍如何在 Linux 中以 RPM 包的方式安装 MySQL 并进行相关的初始化配置,文中方案均已实践验证。 操作系统 CentOS 7.6 数据库版本 MySQL 8.4.3 LTS [!NOTE] 说明 本文主要介绍 RPM 包的安装方式,其他安装方法可查阅官网:MySQL :: MySQL 8.4 Reference Manual ::…

    未分类 2025 年 1 月 13 日
    44600
  • [华为OD机考 – 密语传递 – 基于深度优先搜索的Java实现(2025 A卷 200分)]

    华为2025届OD机考A卷试题库持续更新中,专项练习 _ 戳此进入_ 专题导览 本系列试题已编入《华为OD机考Java真题全集(A/B/C/D/E卷)》。练习频次与中签率正相关, 添加哪吒微信,备注”华为OD备考”,加入专属刷题群 ,每道题配备:解题思路解析、完整代码实现、多组测试数据、算法选择依据、应用场景说明,题库实时更新,24小时在线答疑。 题目要求 …

    2025 年 5 月 12 日
    23800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信