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

相关推荐

  • MySQL 面试题

    MySQL 中有哪几种锁? 全局锁、行级锁、自增锁、记录锁、外键锁、间隙锁、表级锁、元数据锁、意向锁、临键锁 MySQL 中有哪些不同的表格? 基础表、临时表、系统表、信息表、性能模式表、分区表、外键表、触发器使用的表、存储过程和函数使用的表 简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别? 事务支持 InnoDB:支持事务处理,具有提…

    未分类 2025 年 1 月 10 日
    43000
  • Java刷题常见的集合类,各种函数的使用以及常见的类型转化等等

    目录 前言 集合类 ArrayList 1. 创建和初始化 ArrayList 2.添加元素 add 3.获取元素 get 4.删除元素 remove 5.检查元素 6.遍历 ArrayList LinkedList Stack 1. 创建Stack对象 2. 压入元素 (push) 3. 弹出元素 (pop) 4. 查看栈顶元素 (peek) 5. 检查栈…

    2025 年 1 月 5 日
    61100
  • 3dm 格式详解,javascript加载导出3dm文件示例

    3DM 格式详解 3DM 文件格式是由 Rhinoceros 3D(简称 Rhino)软件使用的原生文件格式。这种格式主要用于存储三维模型,支持多种几何类型和丰富的属性信息。以下是 3DM 文件格式的一些关键特性和结构: 文件结构 文件头 : 文件标识符 (File Signature):用于识别文件是否为 3DM 文件。 文件版本号 (File Versi…

    2025 年 1 月 10 日
    76000
  • Java 同步锁性能的最佳实践:从理论到实践的完整指南

    目录 一、同步锁性能分析 (一)性能验证说明 1. 使用同步锁的代码示例 2. 不使用同步锁的代码示例 3. 结果与讨论 (二)案例初步优化分析说明 1. 使用AtomicInteger原子类尝试优化分析 2. 对AtomicInteger原子类进一步优化 3. 结论说明(LongAdder原理理解体会) 二、回顾Java锁优化 (一)synchronize…

    2025 年 1 月 11 日
    79400
  • Java MDC技术详解:实现高效日志链路追踪的实战指南

    一、MDC技术概述 MDC(映射诊断上下文)是SLF4J日志框架提供的一项线程级数据存储功能。作为线程安全的容器,它能够在特定线程范围内保存多组键值数据,并自动将这些信息嵌入日志记录中,从而实现日志信息的上下文关联。 二、MDC的核心价值 功能 描述 应用实例 请求追踪 完整记录请求处理路径 微服务调用链路分析 参数传递 跨方法共享通用数据 机构编码、用户标…

    未分类 2025 年 5 月 19 日
    52300

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信