【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连接报错排查解决记录 背景: “` 系统:uos server-1060e ​ 运行环境kvm虚拟机 ​ mysql版本:5.7.44, for Linux (x86_64) “` 问题现象: 宿主机重启后,kvm虚拟机内的mysql服务无法远程连接了。通过不同的客户端工具连接,报错现象分别如下: dbeaver-ce 工具连接报错: “` …

    2025 年 1 月 11 日
    70000
  • 【GreatSQL优化器-10】find_best_ref

    【GreatSQL优化器-10】find_best_ref 一、find_best_ref介绍 GreatSQL的优化器对于join的表需要根据行数和cost来确定最后哪张表先执行哪张表后执行,这里面就涉及到预估满足条件的表数据,在keyuse_array数组有值的情况下,会用find_best_ref函数来通过索引进行cost和rows的估计,并且会找出最…

    2025 年 1 月 10 日
    53200
  • 华为OD机试E卷 –游戏分组–24年OD统一考试(Java & JS & Python & C & C++)

    文章目录 题目描述 输入描述 输出描述 用例 题目解析 Js算法源码 python算法源码 java算法源码 c++算法源码 c算法源码 题目描述 部门准备举办一场王者荣耀表演赛,有 10 名游戏爱好者参与,分为两队,每队 5 人。每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把 10 名参赛者分为示例尽量相近的两队。一队的实力可…

    未分类 2025 年 1 月 5 日
    74400
  • 数据库与编程语言的连接

    — title: 数据库与编程语言的连接 date: 2024/12/21 updated: 2024/12/21 author: cmdragon excerpt: 数据库与编程语言的连接是实现数据驱动应用程序的核心步骤。开发者通过运用多样的编程语言和数据库驱动程序,可以在应用中执行数据库的CRUD(创建、读取、更新、删除)操作。 categories…

    未分类 2024 年 12 月 24 日
    52700
  • 扣子又出新功能,支持一键部署小程序,太强了!!

    大家好,我是R哥。 作为一名程序员和技术博主,我一直关注如何使用工具提升生产力,尤其是在内容创作和应用开发领域。 拿我开发一个微信小程序为例,我需要懂前端、后端、运维 等全栈技术,开发流程和技术栈复杂,我还需要购买云服务器、云数据库 等各种基础设施,资源耗费非常多。 虽然现在有如 Cursor 这样的革命性 AI 开发工具,它突破了传统开发模式的壁垒,非开发…

    2025 年 1 月 10 日
    99700

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信