news 2026/10/17 2:16:37

面向对象的内容

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面向对象的内容

面向对象中封装继承多态

  • 封装:封装是指将对象的属性(数据)和行为(方法)结合在一起,对外隐藏对象的内部细节,仅通过对象提供的接口与外界交互。封装的目的是增强安全性和简化编程,使得对象更加独立。
  • 继承:继承是一种可以使得子类自动共享父类数据结构和方法的机制。它是代码复用的重要手段,通过继承可以建立类与类之间的层次关系,使得结构更加清晰。
  • 多态:多态是指允许不同类的对象对同一消息作出响应。即同一个接口,使用不同的实例而执行不同操作。多态性可以分为编译时多态(重载)和运行时多态(重写)。它使得程序具有良好的灵活性和扩展性。

详细将多态

多态分为方法重载,方法重写,接口实现

  • 方法重载(同名中):方法重载是指同一类中可以有多个同名方法,它们具有不同的参数列表(参数类型、数量或顺序不同)。虽然方法名相同,但根据传入的参数不同,编译器会在编译时确定调用哪个方法。示例:对于一个 add 方法,可以定义为 add(int a, int b) 和 add(double a, double b)。
  • 方法重写(继承中):方法重写是指子类能够提供对父类中同名方法的具体实现。在运行时,JVM会根据对象的实际类型确定调用哪个版本的方法。这是实现多态的主要方式。示例:在一个动物类中,定义一个 sound 方法,子类 Dog 可以重写该方法以实现 bark,而 Cat 可以实现 meow。
  • 接口与实现(接口中):多态也体现在接口的使用上,多个类可以实现同一个接口,并且用接口类型的引用来调用这些类的方法。这使得程序在面对不同具体实现时保持一贯的调用方式。示例:多个类(如 Dog, Cat)都实现了一个 Animal 接口,当用 Animal 类型的引用来调用 makeSound 方法时,会触发对应的实现。
  • 向上转型和向下转型:在Java中,可以使用父类类型的引用指向子类对象,这是向上转型。通过这种方式,可以在运行时期采用不同的子类实现。向下转型是将父类引用转回其子类类型,但在执行前需要确认引用实际指向的对象类型以避免 ClassCastException。
if(ainstanceofDog){//问编译器a是不是Dog或其子类Dogd=(Dog)a;// 向下转型d.fetchBall();// ✅ 现在可以了}
  • fetchBall()方法是Dog的,如果写的是Animal a = new Dog();a.fetchBall()的话编译会报错的,因为在编译器看来a一直是Animal类型,这个类型里面没有fetchBall()方法

面向对象的一些设计原则

  • 单一职责原则(SRP):一个类应该只负责一项职责。例子:考虑一个员工类,它应该只负责管理员工信息,而不应负责其他无关工作。
  • 开放封闭原则(OCP):对扩展开放,对修改封闭。例子:通过制定接口来实现这一原则,比如定义一个图形类,然后让不同类型的图形继承这个类,而不需要修改图形类本身。
  • 里氏替换原则(LSP):子类对象应该能够替换掉所有父类对象。例子:一个正方形是一个矩形,但如果修改一个矩形的高度和宽度时,正方形的行为应该如何改变就是一个违反里氏替换原则的例子。
  • 接口隔离原则(ISP):接口应该小而专。例子:通过接口抽象层来实现底层和高层模块之间的解耦,比如使用依赖注入。
  • 依赖倒置原则(DIP):高层模块不应该依赖低层模块,二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。例子:如果一个公司类包含部门类,应该考虑使用合成/聚合关系,而不是将公司类继承自部门类。
  • 最少知识原则 (Law of Demeter):一个对象应当对其他对象有最少的了解,只与其直接的朋友交互。

接口里面可以塞的东西

  • 抽象方法:所以实现接口的类都要重写接口里面的抽象方法
  • 默认方法:加关键字default,实现类可以选择重写默认方法
  • 静态方法:可以直接通过接口名字来调用,不需要实现类
  • 私有方法:加关键字private,只能在类中使用的方法

类的静态变量和方法

在Java中,静态变量和静态方法是与类本身关联的,而不是与类的实例(对象)关联。它们在内存中只存在一份,可以被类的所有实例共享。

  • 静态变量(也称为类变量)是在类中使用static关键字声明的变量。它们属于类而不是任何具体的对象。
  • 主要的特点:
  • 共享性:所有该类的实例共享同一个静态变量。如果一个实例修改了静态变量的值,其他实例也会看到这个更改。
  • 初始化:静态变量在类被加载时初始化,只会对其进行一次分配内存。
  • 访问方式:静态变量可以直接通过类名访问,也可以通过实例访问,但推荐使用类名。
  • 静态方法是在类中使用static关键字声明的方法。类似于静态变量,静态方法也属于类,而不是任何具体的对象。
  • 主要的特点:
  • 无实例依赖:静态方法可以在没有创建类实例的情况下调用。对于静态方法来说,不能直接访问非静态的成员变量或方法,因为静态方法没有上下文的实例。
  • 访问静态成员:静态方法可以直接调用其他静态变量和静态方法,但不能直接访问非静态成员。
  • 多态性:静态方法不支持重写(Override),但可以被隐藏(Hide)。

静态内部类和非静态内部类

  • 非静态内部类:就是类中类,依附于外面类的实例而存在,可以访问外部类的一切
  • 静态内部类:就是加一个static关键字的类种类,不依附于外部类的实例化,它属于外部类的本身。只能访问外部类的static的成员。因为你想,对应成员变量,不同的实例有不同的成员变量,我这个不依附于实例,那我怎么访问成员变量?
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 2:16:34

概念加数字类型

Java的优势 Java的特点就是Java的优势Java虚拟机的存在可以让一次编写到处运行面向对象也算一个优势但是现在很多语言都是面向对象的嗯Java最开始的初衷就是面向对象了所以它面向对象做的应该是最好的有一个很强大的生态spring框架各种库和工具社区大企业用的也多内存管理&…

作者头像 李华
网站建设 2026/10/17 2:15:31

CTF隐写入门:ZIP文件头修复与LSB隐写提取实战

CTF里的隐写题,看着永远是最“无害”的一类——不考漏洞利用、不考内网渗透,但做起来经常让人对着一个图片发呆半小时,最后发现线索就在眼皮底下。这道BugkuCTF“赛博朋克”就是典型代表:题目名字看起来很赛博,压缩包解…

作者头像 李华
网站建设 2026/10/17 2:14:44

基于MP2642GR-Z与STM32F756ZG的两串电池均衡方案设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/17 2:12:36

AIRI Web 版使用指南:从对话提供商接入到语音与角色卡配置

人工智能AI AgentMCP 服务工具调用GUI 自动化语音数字人交互助手 【免费下载链接】airi 💖🧸 自托管、归你拥有的 Grok 风格 AI 伴侣与 waifu / 赛博生命灵魂容器,目标是接近 Neuro-sama 的高度;支持实时语音聊天、Minecraft 和 F…

作者头像 李华