深入探究Java面向对象的三大特征:封装、继承、多态

news2024/9/25 1:18:28

文章目录

    • 1. 封装(Encapsulation)
    • 2. 继承(Inheritance)
    • 3. 多态(Polymorphism)
    • 结语

在这里插入图片描述

导语:Java是一门面向对象的编程语言,其核心思想是将现实世界中的事物抽象成对象,并通过封装、继承和多态这三大特征来实现面向对象的编程。本文将深入探究Java面向对象的三大特征,并通过代码片段解释说明它们的作用和用法。

1. 封装(Encapsulation)

封装是面向对象编程中最基本的特征之一,它将数据和操作数据的方法(即方法)封装在一个单独的单元(即类)中。通过封装,我们可以隐藏对象的内部细节,只暴露出必要的接口供其他对象进行交互,从而实现了信息的隐藏和保护。

示例代码:

// 定义一个Person类
public class Person {
    private String name;
    private int age;

    // 封装姓名属性的访问方法
    public String getName() {
        return name;
    }

    // 封装年龄属性的访问方法
    public int getAge() {
        return age;
    }

    // 封装设置姓名属性的方法
    public void setName(String name) {
        this.name = name;
    }

    // 封装设置年龄属性的方法
    public void setAge(int age) {
        if (age >= 0) {
            this.age = age;
        }
    }
}

在上面的代码中,我们定义了一个名为Person的类,并使用private关键字来修饰name和age成员变量,从而将其封装在类的内部,外部无法直接访问这些变量。然后,我们通过公有的getter和setter方法来访问和修改name和age属性,从而实现了对成员变量的控制和保护。

2. 继承(Inheritance)

继承是面向对象编程中的另一个重要特征,它允许一个类继承另一个类的属性和方法,从而实现代码的重用和扩展性。被继承的类称为父类(或超类),继承这个类的类称为子类。子类可以继承父类的所有非私有属性和方法,并可以在其基础上添加新的属性和方法。

示例代码:

// 定义一个父类Animal
class Animal {
    void sound() {
        System.out.println("动物发出声音");
    }
}

// 定义一个子类Dog,继承自Animal类
class Dog extends Animal {
    // 子类重写了父类的sound方法
    @Override
    void sound() {
        System.out.println("汪汪汪!");
    }

    // 子类新增的方法
    void fetch() {
        System.out.println("狗狗正在追逐球!");
    }
}

在上面的代码中,我们定义了一个Animal类,其中包含一个sound方法。然后,我们定义了一个Dog类,并使用extends关键字将其继承自Animal类。在Dog类中,我们重写了父类Animal的sound方法,并添加了一个新的方法fetch。这样,我们就实现了对父类的扩展,并可以在子类中使用继承自父类的方法。

3. 多态(Polymorphism)

多态是面向对象编程的第三个特征,它允许一个对象在不同的情况下表现出不同的行为。多态分为编译时多态和运行时多态。编译时多态是通过方法重载来实现的,而运行时多态是通过方法重写和向上造型来实现的。

示例代码:

// 定义一个父类Shape
class Shape {
    void draw() {
        System.out.println("绘制图形");
    }
}

// 定义一个子类Circle,继承自Shape类
class Circle extends Shape {
    // 子类重写了父类的draw方法
    @Override
    void draw() {
        System.out.println("绘制圆形");
    }
}

// 定义一个子类Rectangle,继承自Shape类
class Rectangle extends Shape {
    // 子类重写了父类的draw方法
    @Override
    void draw() {
        System.out.println("绘制矩形");
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建Shape对象,并根据情况调用子类的draw方法
        Shape shape1 = new Circle();
        Shape shape2 = new Rectangle();
        shape1.draw();
        shape2.draw();
    }
}

在上面的代码中,我们定义了一个Shape类,并包含一个draw方法。然后,我们定义了两个子类Circle和Rectangle,并在这两个子类中分别重写了父类Shape的draw方法。在main方法中,我们通过向上造型,将shape1和shape2分别指向了Circle和Rectangle的对象。在调用draw方法时,虽然我们使用的是Shape类型的引用,但实际上会调用对应子类的draw方法,从而实现了多态性。

结语

面向对象的三大特征:封装、继承和多态,是Java编程的重要基石。通过封装,我们可以隐藏对象的内部细节,保护数据的安全;通过继承,我们可以实现代码的重用和扩展;通过多态,我们可以使对象在不同的情况下表现出不同的行为。掌握这三大特征,将为您成为一名优秀的Java程序员铺平道路,希望本文的示例代码和解释能够帮助您深入理解Java面向对象的编程思想。愿您在学习和实践的过程中取得更多的成就

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/810289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python(五十二)列表元素的判断及遍历

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

自己整理的JAVA集合

概括: 数组,链表,散列表,二分查找树,红黑树是五种不同的数据结构,它们有各自的特点和用途。ArrayList,LinkedList,HashTable,LinkedHashMap,HashMap 是 Java…

Camera组件

Clear Flags: Skybox:天空盒 Solid Color:填充颜色,当有空白处时填充背景颜色 Depth Only:只渲染想要渲染的层级 Dont Clear:不清除上一帧所留下来的数据,可以做类似残影的效果 Culling Mas…

Unity Addressable

Unity重要目录 工程中的几个重要目录 Assets存放资源、代码、配置Library大部分的资源导入到Assets目录之后,会转化成Unity认可的文件,转化后的文件会存储在这个目录Logs日志文件Packages第三方插件ProjectSettings存放各种项目设定UserSettings用户偏好…

CentOS 8 错误: Error setting up base repository

配置ip、掩码、网关、DNS VMware网关可通过如下查看 打开网络连接 配置镜像的地址 vault.centos.org/8.5.2111/BaseOS/x86_64/os/

java 阿里云 发送短信功能实现

1. 注册短信平台(以阿里云为例) 常用短信服务平台:阿里云、华为云、腾讯云、京东、梦网、乐信等 2. 注册成功后,开通短信服务 3. 设置短信签名、短信模板、AccessKey AccessKey 是访问阿里云 API 的密钥,具有账户的完全权限,我们…

C语言实现三子棋游戏

test.c源文件 - 三子棋游戏测试 game.h头文件 - 三子棋游戏函数的声明 game.c源文件 - 三子棋游戏函数的实现 主函数源文件: #define _CRT_SECURE_NO_WARNINGS 1#include"game.h" //自己定义的用"" void menu() {printf("*************…

代码随想录算法训练营day43

文章目录 Day43 最后一块石头的重量II题目思路代码 目标和题目思路代码 一和零题目思路代码 Day43 最后一块石头的重量II 1049. 最后一块石头的重量 II - 力扣(LeetCode) 题目 有一堆石头,每块石头的重量都是正整数。 每一回合&#xff0…

2023-07-30 LeetCode每日一题(环形链表 II)

2023-07-30每日一题 一、题目编号 142. 环形链表 II二、题目链接 点击跳转到题目位置 三、题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 n…

【探索C++中的顺序表】手动实现vector容器

🚀write in front🚀 📜所属专栏:初阶数据结构 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对…

Fourier变换及其应用(Brad G. Osgood)——第2章——Fourier变换

第2章 Fourier变换 2.1 初识Fourier变换(A First Look at the Fourier Transform) 我们即将从Fourier级数过渡到Fourier变换。“过渡(transition)”是合适的词,因为我们选择了Fourier变换从周期函数到非周期函数的引出路径。 为了完成这一旅程,我们将把…

【优选算法题练习】day10

文章目录 一、137. 只出现一次的数字 II1.题目简介2.解题思路3.代码4.运行结果 二、剑指 Offer 53 - II. 0~n-1中缺失的数字1.题目简介2.解题思路3.代码4.运行结果 三、153. 寻找旋转排序数组中的最小值1.题目简介2.解题思路3.代码4.运行结果 总结 一、137. 只出现一…

登录报错 “msg“:“Request method ‘GET‘ not supported“,“code“:500

1. 登录失败 2. 排查原因, 把 PostMapping请求注释掉, 或改成GetMapping请求就不会报错 3. 找到SecurityConfig.java , 新增 .antMatchers("/**/**").permitAll() //匹配允许所有路径 4. 登录成功

【算法基础:动态规划】5.4 状态压缩DP

文章目录 例题列表291. 蒙德里安的梦想⭐⭐⭐⭐⭐91. 最短Hamilton路径⭐⭐⭐ 相关链接 例题列表 291. 蒙德里安的梦想⭐⭐⭐⭐⭐ https://www.acwing.com/problem/content/293/ 当横向方格摆放完成后,纵向方格的拜访方式就已经确定了。(因为我们只要求…

井字棋(TicTacToe)

目录 三种游戏 习题 1. 传统设置 2. 中间的网格 三种游戏 “选15”、“井字棋”、“魔幻15”游戏本质上是同一个游戏。 function tictactoe(job) % TICTACTOE Pick15, TicTacToe, and Magic3. % % Pick15. Pick single digit numbers. Each digit can be chosen % on…

蓝海卓越计费管理系统远程命令执行

活着,就要时刻准备承受磨难! 漏洞描述 蓝海卓越计费管理系统存在命令调试页面,导致攻击者可以远程命令执行 漏洞复现 访问 debug.php页面 远程调试命令执行 /debug.php漏洞证明 文笔生疏,措辞浅薄,望各位大佬不吝…

GIS基础制图之地形图

数据:地理空间数据云(http://www.gscloud.cn/)下一张北京地区DEM(30m),统一用这一张来做。 晶格 工具运行窗口不贴了,因为参数设置基本上都是默认没有什么要改的 1、「3D Analyst」—「转换」—「由栅格转出」—「栅格转TIN」 2、「3D Analyst」—「转换」—「由TIN转出」—…

【Rust教程 | 基础系列 | Cargo工具】Cargo介绍及使用

文章目录 前言一,Cargo介绍1,Cargo安装2,创建Rust项目2,编译项目:3,运行项目:4,测试项目:5,更新项目的依赖:6,生成项目的文档&#xf…

MP的开发流程

MP的开发流程 1、添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.ap…

微服务04 分布式搜索引擎 elasticsearch DSL数据聚合 自动补全 数据同步 集群 微服务保护 Sentinel

微服务03 分布式搜索引擎 elasticsearch ELK kibana RestAPI 索引库 DSL查询 RestClient 黑马旅游 分布式搜索引擎03 1.数据聚合 聚合&#xff08;aggregations&#xff09;可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&…