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

相关推荐

  • chrome浏览器如何设置默认的搜索引擎

    前言 大家好,我是小徐啊。chrome浏览器是我们常用的浏览器,在我们开发java应用的时候,是不可或缺的。而我们开发中,经常会遇到各种各样的问题,这个时候就需要去搜索。其实,在chrome浏览器中,是可以直接在地址栏中输入关键词进行搜索的,且可以支持设置搜索引擎的,今天小徐就来介绍下。文末附获取方式。 打开chrome浏览器设置界面 首先,在浏览器的界面上…

    2024 年 12 月 30 日
    53300
  • 【手写 RPC】使用netty手写一个RPC框架 结合新特性 虚拟线程

    【手写RPC框架】如何使用netty手写一个RPC框架 结合新特性 虚拟线程 什么是RPC框架 RPC(Remote Procedure Call)远程过程调用,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC框架是一种远程调用的框架,它可以让你像调用本地方法一样调用远程方法。 避免了开发人员自己去封装网络请求、连接管理、序列…

    2025 年 1 月 13 日
    56500
  • JavaSE 核心知识精要(万字长文详解,助你快速掌握!)

    目录一. 基础语法要点1. 数据类型概述2. 数据类型转换规则3. 运算符详解4. 循环结构解析5. 方法定义规范6. 数组使用指南二. 面向对象编程1. 类与对象关系2. 构造方法解析3. 方法重载机制4. this关键字应用5. static特性说明6. 代码块执行顺序7. 访问权限控制8. 三大特性剖析封装原理继承机制多态实现9. 方法重写规则10. …

    2025 年 5 月 15 日
    27000
  • Python在多个Excel文件中找出缺失数据行数多的文件

    本文介绍基于Python 语言,针对一个文件夹 下大量的Excel 表格文件,基于其中每一个文件 内、某一列数据 的特征,对其加以筛选,并将符合要求 与不符合要求 的文件分别复制到另外两个新的文件夹 中的方法。 首先,我们来明确一下本文的具体需求。现有一个文件夹,其中有大量的Excel 表格文件(在本文中我们就以csv格式的文件为例);如下图所示。 其中,每…

    2025 年 1 月 13 日
    39600
  • Java中的Map(如果想知道Java中有关Map的知识点,那么只看这一篇就足够了!)

    前言:在Java编程领域,集合框架(Collection Framework)扮演着至关重要的角色,它提供了丰富的接口和类,用于管理和操作数据集合。在这些接口和类中,Map和Set因其独特的功能而备受青睐,Map用于存储键值对,而Set则用于存储不允许重复的元素集合。 ✨✨✨ 这里是秋刀鱼不做梦的BLOG 目录 1.Map概念简介 (1)Map的定义 (2)…

    2024 年 12 月 27 日
    50900

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信