【Java笔记】第8章:面向对象的三大特性(封装、继承、多态)

  • 前言
  • 1. 三大特性概述
  • 2. 封装
  • 3. 继承
  • 4. 多态
  • 结语

在这里插入图片描述
在这里插入图片描述

#include<GUIQU.h>
int main {
上期回顾:【Java笔记】第7章:面向对象
个人主页:C_GUIQU
归属专栏:【Java学习】
return 一键三连;
}
在这里插入图片描述

前言

各位小伙伴大家好!上期小编给大家讲解了Java中的面向对象,接下来讲讲Java中面向对象的三大特性!

1. 三大特性概述

Java中面向对象的三大特性是封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。这些特性是Java编程语言中实现面向对象编程(OOP)的核心概念。

  1. 封装(Encapsulation)
    • 封装是指将数据(属性)和操作数据的方法(行为)封装在一起,形成一个不可分割的整体。
    • 在Java中,封装通过访问修饰符(如publicprivateprotecteddefault)来实现,用于控制类成员(属性和方法)的访问级别。
    • 封装的目的是保护对象的内部状态不被外部直接访问,只能通过公共接口(方法)来访问和修改。
  2. 继承(Inheritance)
    • 继承是指一个类(子类)可以继承另一个类(父类)的属性和方法。
    • 在Java中,继承通过extends关键字来实现,子类可以扩展父类的功能,也可以覆盖父类的方法以提供新的实现。
    • 继承的目的是代码复用和扩展,子类可以重用父类的代码,同时添加新的属性和方法。
  3. 多态(Polymorphism)
    • 多态是指允许不同类的对象对同一消息做出响应,即同一操作作用于不同的对象时可以有不同的解释和行为。
    • 在Java中,多态通常通过接口(interface)和继承来实现。
    • 多态的目的是提高代码的灵活性和可扩展性,允许程序在不修改现有代码的情况下,添加新的功能和行为。
      这三大特性使得Java成为了一个强大的面向对象编程语言,它们允许开发者以更接近现实世界的方式思考和解决问题。通过封装,我们可以隐藏对象的内部实现细节,只暴露必要的接口;通过继承,我们可以重用和扩展已有的代码;通过多态,我们可以编写更灵活、可扩展的代码。

2. 封装

封装是面向对象编程中的一个核心概念,它将数据(属性)和操作数据的方法(行为)组合在一起,形成一个不可分割的整体。封装的目的是保护对象的内部状态不被外部直接访问,只能通过公共接口(方法)来访问和修改。在Java中,封装通过访问修饰符(如publicprivateprotecteddefault)来实现。

【访问修饰符】
在Java中,有四种访问修饰符:

  1. public:公共的,可以被任何类访问。
  2. private:私有的,只能被同一个类的其他方法访问。
  3. protected:受保护的,可以被同一个包中的类访问,或者被子类访问。
  4. default(不写):默认的,可以被同一个包中的类访问。

【封装的实现】
封装的实现主要通过以下几种方式:

  1. 属性私有化:将类的属性设置为私有,只允许类内部的方法访问和修改。
    public class Person {private String name;private int age;public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}
    }
    
  2. 方法公开化:将类的属性的设置和获取方法设置为公开,以供外部使用。
  3. 构造方法:在类中定义构造方法,用于在创建对象时初始化对象的属性。
    public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}
    }
    

【封装的好处】
封装有以下几个好处:

  1. 保护对象的状态:通过将属性设置为私有,可以防止外部直接修改对象的内部状态,从而保护对象的一致性和完整性。
  2. 提高代码的可读性和可维护性:通过公开的接口(方法)来访问和修改对象的属性,可以使代码更易于理解和维护。
  3. 实现代码的复用:通过继承和多态,可以重用已有的代码,并在此基础上添加新的功能和行为。
  4. 提高系统的灵活性和可扩展性:通过封装,可以更容易地添加新的功能和行为,而不需要修改现有的代码。
    封装是面向对象编程中非常重要的一个概念,它可以帮助开发者创建更可靠、可维护和可扩展的代码。

3. 继承

继承是面向对象编程中的一个核心概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。继承的目的是代码复用和扩展,子类可以重用父类的代码,同时添加新的属性和方法。在Java中,继承通过extends关键字来实现。

【继承的实现】
在Java中,继承的实现主要通过以下几个步骤:

  1. 声明继承关系:在子类中使用extends关键字来声明它继承自父类。

    public class Animal {void makeSound() {System.out.println("Animal makes a sound");}
    }
    public class Dog extends Animal {void makeSound() {System.out.println("Dog barks");}
    }
    

    在这个例子中,Dog 类继承了 Animal 类,并覆盖了 makeSound 方法以提供特定的实现。

  2. 继承属性和方法:子类可以继承父类的属性和方法,包括私有属性和方法。

  3. 重写父类方法:子类可以覆盖(override)父类的方法,以提供新的实现。覆盖的方法必须具有相同的名称、返回类型和参数列表。

    public class Animal {void makeSound() {System.out.println("Animal makes a sound");}
    }
    public class Dog extends Animal {@Overridevoid makeSound() {System.out.println("Dog barks");}
    }
    

    在这个例子中,Dog 类覆盖了 Animal 类的 makeSound 方法。

  4. 添加新属性和方法:子类可以添加新的属性和方法,以扩展父类的功能。

    public class Animal {void makeSound() {System.out.println("Animal makes a sound");}
    }
    public class Dog extends Animal {void bark() {System.out.println("Dog barks");}
    }
    

    在这个例子中,Dog 类添加了一个新的方法 bark

【继承的好处】
继承有以下几个好处:

  1. 代码复用:子类可以重用父类的代码,避免重复编写相同的代码。
  2. 扩展功能:子类可以扩展父类的功能,添加新的属性和方法。
  3. 提高可读性和可维护性:通过继承,可以创建一个层次化的类结构,使得代码更易于理解和维护。
  4. 实现多态:继承是实现多态的基础,通过继承,可以创建具有相同接口的类,从而实现多态。继承是面向对象编程中非常重要的一个概念,它可以帮助开发者创建更可靠、可维护和可扩展的代码。

4. 多态

多态是面向对象编程中的一个核心概念,它允许不同类的对象对同一消息做出响应,即同一操作作用于不同的对象时可以有不同的解释和行为。在Java中,多态通常通过接口(interface)和继承来实现。多态的目的是提高代码的灵活性和可扩展性,允许程序在不修改现有代码的情况下,添加新的功能和行为。

【多态的实现】
多态的实现主要通过以下几种方式:

  1. 接口(interface)
    • 接口是一组抽象方法的集合,用于定义一组行为。
    • 类可以通过实现接口来继承接口的方法。
    • 接口中的方法都是抽象的,没有具体的实现。
    • 实现接口的类必须提供接口中所有方法的实现。
    public interface Flyable {void fly();
    }
    public class Bird implements Flyable {public void fly() {System.out.println("Bird flies");}
    }
    public class Plane implements Flyable {public void fly() {System.out.println("Plane flies");}
    }
    public class PolyTest {public static void main(String[] args) {Flyable flyer1 = new Bird();Flyable flyer2 = new Plane();flyer1.fly(); // 输出 "Bird flies"flyer2.fly(); // 输出 "Plane flies"}
    }
    
  2. 继承(Inheritance)
    • 子类可以覆盖(override)父类的方法,以提供新的实现。
    • 覆盖的方法必须具有相同的名称、返回类型和参数列表。
    • 子类对象可以作为父类类型的引用,从而实现多态。
    public class Animal {void makeSound() {System.out.println("Animal makes a sound");}
    }
    public class Dog extends Animal {@Overridevoid makeSound() {System.out.println("Dog barks");}
    }
    public class PolyTest {public static void main(String[] args) {Animal animal = new Dog();animal.makeSound(); // 输出 "Dog barks"}
    }
    

【多态的实现】
多态有以下几个好处:

  1. 提高代码的灵活性和可扩展性:通过多态,可以创建一个灵活的代码结构,使得程序在不修改现有代码的情况下,添加新的功能和行为。
  2. 实现代码复用:通过继承和接口,可以重用已有的代码,并在此基础上添加新的功能和行为。
  3. 提高代码的可读性和可维护性:通过多态,可以创建一个层次化的类结构,使得代码更易于理解和维护。

多态是面向对象编程中非常重要的一个概念,它可以帮助开发者创建更可靠、可维护和可扩展的代码。

结语

至此,Java面向对象的三大特性讲解完毕。
感谢您的观看!互三必回!持续更新中~!

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

网络工程师备考1——基础学习

认识设备 1 交换机 一、什么是交换机&#xff1f; 实现不同电脑之间数据的转发 换机是一种用于电(光)信号转发的网络设备。 它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。交换机工作于OSI参考模型的第二层&#xff0c;即数据…

使用 Supabase 的 Realtime + Storage 非常方便呢

文章目录 &#xff08;一&#xff09;Supabase&#xff08;二&#xff09;Realtime&#xff08;消息&#xff09;&#xff08;2.1&#xff09;Python 消息订阅&#xff08;2.2&#xff09;JavaScript 消息订阅 &#xff08;三&#xff09;Storage&#xff08;存储&#xff09;&…

Linux:Ubuntu修改root密码

Linux&#xff1a;Ubuntu修改root密码 修改默认grub配置文件 rootshanxin:~# vim /etc/default/grub# 主要修改内容如下&#xff1a;GRUB_DEFAULT0 #GRUB_TIMEOUT_STYLEhidden 注释这一行 GRUB_TIMEOUT5 # 将这一行的时间改为5秒进行开启启动的grub文件的复写 rootshanxin:~…

芯课堂 | UI Creator 物理键盘移植指南

LVGL提供输入设备的种类一共有5种&#xff0c;分别是&#xff1a;touchpad&#xff08;触摸板&#xff09;、mouse&#xff08;鼠标&#xff09;、keypad&#xff08;键盘&#xff09;、encoder&#xff08;编码器&#xff09;、button&#xff08;外部按键&#xff09;。而基于…

如何成为一个专业的AI产品经理?

可以找专业的老师带。 可以找专业的内容学。 可以多遇挫折并快速学习&#xff0c;屡败屡战&#xff0c;笔者本人从业AI十年有余&#xff0c;吃了不少苦&#xff0c;有过很多或成功或失败的经历。 成为一个专业的AI产品经理需要一系列专业知识和技能的积累&#xff0c;以及在…

基于Matlab卷积神经网络(CNN)人脸识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 人脸识别技术作为计算机视觉领域的一个重要分支&#xff0c;已经广泛应用于安全监控、身份验证…

FreeRTOS学习——FreeRTOS队列(下)之队列创建

本篇文章记录我学习FreeRTOS队列创建的知识。主要分享队列创建需要使用的初始化函数、队列复位函数。 需要进一步了解FreeRTOS队列的相关知识&#xff0c;读者可以参考以下文章&#xff1a; FreeRTOS学习——FreeRTOS队列&#xff08;上&#xff09;_freertos 单元素队列-CSDN博…

【hackmyvm】Slowman靶机

文章目录 主机探测端口探测FTP匿名登录 目录探测hydra爆破mysql爆破zip------fcrackzip爆破密码-----john提权 主机探测 ┌──(root㉿kali)-[/home/kali] └─# fping -ag 192.168.9.1/24 2>/dev/null 192.168.9.221 主机192.168.9.224 靶机端口探测 ┌──(roo…

【教程】Linux 安装 kkFileView 文档在线预览项目 及优化

【教程】Linux 安装 kkFileView 文档在线预览项目 官网 kkFileView - 在线文件预览 (keking.cn) 安装包 可以直接下载成品 也可以下载source 源码 自己编译 kkFileView 发行版 - Gitee.com 打开IDEA 然后先clear 再install 然后在 file-online-preview\server\target 目录…

WordPress插件Disable WP REST API,可根据是否登录来禁用REST API

前面跟大家分享了代码版禁用WordPress REST API的方法&#xff08;详见『WordPress4.7以上版本如何禁用JSON REST API&#xff1f;』&#xff09;&#xff0c;不过有些站长不太敢折腾自己的网站代码&#xff0c;那么建议试试这款Disable WP REST API&#xff0c;它可以&#xf…

小结5:朗读练习第二段

五、朗读练习2 2024-5-6始&#xff0c;5-14终&#xff0c;5-15写。 我渐渐体会到一些朗读的乐趣。但我还要考研&#xff0c;要写作业、期末考试。如果是在大一该多好。我可以就这样一天一天的写下去&#xff0c;慢慢地有一些自己的作品&#xff0c;还能录视频发到b站上。 上一篇…

通过修改物理内存实现跨进程内存读写

习一下利用修改物理内存来跨进程内存读写 系统&#xff1a;win10 21h1 x64 编译环境: vs2022 详情见附录 基础 虚拟地址转物理地址 虚拟地址也称线性地址&#xff0c;一个线性地址进程的DirBase地址可以转换成物理地址。先来看线性地址的含义 在x64体系中只实现了48位的virtu…

刷题之从前序遍历与中序遍历序列构造二叉树(leetcode)

从前序遍历与中序遍历序列构造二叉树 前序遍历&#xff1a;中左右 中序遍历&#xff1a;左中右 前序遍历的第一个数必定为根节点&#xff0c;再到中序遍历中找到该数&#xff0c;数的左边是左子树&#xff0c;右边是右子树&#xff0c;进行递归即可。 #include<vector>…

Juniper查看并调整策略顺序

1.查看安全策略 >show security policies 顺序就是按照显示出来的顺序&#xff0c;与Index无关&#xff0c;从上到下匹配 2. 调整防火墙策略 #insert security policies from-zone CAMERAS to-zone INTERNET policy CAMERAS-to-NTP before policy CAMERAS-to-INTERNET …

操作系统3_作业与处理机调度

操作系统3_作业与处理机调度 文章目录 操作系统3_作业与处理机调度1. 作业的概念与组成2. 作业的建立及状态3. 处理机调度相关概念3.1 调度级别3.2 调度队列模型3.3 选择准则4. 作业调度与进程调度5. 典型处理机调度算法5.1 先来先服务算法FCFS5.2 短作业优先算法SJF5.3 优先级…

拨云见日,ATFX七场研讨会揭秘投资先机

财经先机&#xff0c;一手掌握。近期&#xff0c;随着国际金价持续走高&#xff0c;避险情绪高涨&#xff0c;由此激发新一轮投资热潮。作为业界领先的金融创新品牌&#xff0c;ATFX深受投资者认可和信赖&#xff0c;为助力广大投资者了解市场运行规律&#xff0c;捕捉财经脉络…

怎么画思维导图?方法介绍

怎么画思维导图&#xff1f;在数字化时代&#xff0c;思维导图已成为我们工作、学习和生活中的得力助手。它不仅能帮助我们更好地组织和表达思想&#xff0c;还能提升我们的思维能力和创造力。那么&#xff0c;哪些软件可以画思维导图呢&#xff1f;本文将为你揭秘几款功能强大…

Linux 应用入门(一)

1. 交叉编译 概念&#xff1a;在当前编译平台下&#xff0c;编译出来的程序能运行在体系结构不同的另一种目标平台上&#xff0c;但是编译平台本身却不能运行该程序。 为什么需要交叉编译&#xff1f; 速度&#xff1a;目标平台得运行速度比主机往往慢得多&#xff0c;因为许多…

Docker+nginx部署SpringBoot+vue前后端分离项目(保姆及入门指南)

前后分离项目部署 项目回顾工具上线准备1、win1.1、前端1.2、后端 2、linux环境2.1、安装docker2.2、安装docker compose2.3、编写Dockerfile文件2.4、编写docker-compose.yml文件2.5、修改application-pro.yml2.6、准备好nginx的挂载目录和配置2.7、部署后端服务 项目回顾 书…

数据挖掘实战-基于内容协同过滤算法的电影推荐系统

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…