【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 日

相关推荐

  • Discord技术架构调研(IM即时通讯技术架构分析)

    一、目标 调研 discord 的整体架构,发掘可为所用的设计思想 二、调研背景 Discord作为目前比较火的一个在线聊天和语音通信平台且具有丰富的功能。另外其 “超级”群 概念号称可支持百万级群聊 以及 永久保留用户聊天记录。探究其相关技术架构与技术实现 三、产品介绍 目前广泛使用的在线聊天和语音通信平台。最初于2015年发布,旨在为游戏社区提供一个交流…

    2025 年 1 月 12 日
    49100
  • Redis 爆高危漏洞,请速度修复。。

    大家好,我是R哥。 今天一早收到了腾讯云给我的【主机安全 】漏洞通知: 好家伙,大名鼎鼎的 Redis 爆高危漏洞了,R哥的题库「Java面试库」也用到了 Redis 来缓存面试题内容,所以这一下子就引起了我的警惕,赶紧看看什么鬼。 漏洞描述 下面是漏洞描述和修复说明: https://github.com/redis/redis/security/advi…

    2025 年 1 月 6 日
    47900
  • Java StampedLock:实现原理与最佳实践

    Java StampedLock:实现原理与最佳实践 1. 引言 2. StampedLock概述 2.1 什么是StampedLock? 2.2 核心特性 3. StampedLock的三种模式详解 3.1 写锁(Write Lock) 3.2 悲观读锁(Pessimistic Read Lock) 3.3 乐观读(Optimistic Read) 4. …

    2025 年 1 月 6 日
    51600
  • 【java-数据结构篇】揭秘 Java LinkedList:链表数据结构的 Java 实现原理与核心概念

    我的个人主页我的专栏:Java-数据结构 ,希望能帮助到大家!!!点赞❤ 收藏❤ 目录 1. Java LinkedList 基础 1.1 LinkedList 简介1.2 LinkedList 的实现原理1.3 LinkedList 与 ArrayList 的区别 2. 链表基础 2.1 链表的定义与种类2.2 单链表与双链表的区别2.3 循环链表与普通链…

    2024 年 12 月 28 日
    41500
  • JavaScript实现MD5加密的技术解析与应用指南

    本文配套学习资料已更新,点击获取 概述:作为经典的哈希算法,MD5能够将任意数据转换为固定长度的数字指纹。在前端开发领域,MD5常用于数据校验、密码加密及防篡改验证。虽然存在安全缺陷,但在特定场景下仍具实用价值。JavaScript环境下通常借助crypto-js等库实现MD5功能。本文将深入探讨MD5在JS中的实现原理、典型应用及安全注意事项。 1. MD…

    2025 年 5 月 15 日
    31300

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信