当前位置: 首页 > article >正文

【Java】面向对象三大基本特征

【Java】面向对象三大基本特征

1.封装

On Java 8:研发程序员开发一个工具类,该工具类仅向应用程序员公开必要的内容,并隐藏内部实现的细节。这样可以有效地避免该工具类被错误的使用和更改,从而减少程序出错的可能。彼此职责划分清晰,相互协作。当应用程序员调用研发程序员开发的工具类时,双方建立了关系。应用程序员通过使用现成的工具类组装应用程序或者构建更大的工具库。如果工具类的创建者将类的内部所有信息都公开给调用者,那么有些使用规则就不容易被遵守。因为前者无法保证后者是否会按照正确的规则来使用,甚至是改变该工具类。只有设定访问控制,才能从根本上阻止这种情况的发生。

封装是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

Java访问修饰符:

  1. public(公开)表示任何人都可以访问和使用该元素;
  2. private(私有)除了类本身和类内部的方法,外界无法直接访问该元素。private 是类和调用者之间的屏障。任何试图访问私有成员的行为都会报编译时错误;
  3. protected(受保护)类似于 private,区别是子类可以访问 protected 的成员,但不能访问 private 成员;
  4. default(默认)如果你不使用前面的三者,默认就是 default 访问权限。default 被称为包访问,因为该权限下的资源可以被同一包(库组件)中其他类的成员访问。
修饰符当前类同一包内子孙类(同一包)子孙类(不同包)其他包
publicYYYYY
protectedYYYY/N(说明)N
defaultYYYNN
privateYNNNN

protected补充:

  • 基类的protected成员是包内可见的,并且对子类可见;
  • 若子类和基类不在同一包内,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。

2.继承

继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。

要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。

3.多态

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

实现多态,有两种方式,覆盖和重载。覆盖和重载的区别在于,覆盖在运行时决定,重载是在编译时决定。并且覆盖和重载的机制不同,例如在 Java 中,重载方法的签名必须不同于原先方法的,但对于覆盖签名必须相同。

本质上多态分两种:

  1. 编译时多态(又称静态多态)
  2. 运行时多态(又称动态多态)

方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

重载(overload)就是编译时多态的一个例子,编译时多态在编译时就已经确定,运行时运行的时候调用的是确定的方法。

我们通常所说的多态指的都是运行时多态,也就是编译时不确定究竟调用哪个具体方法,一直延迟到运行时才能确定。这也是为什么有时候多态方法又被称为延迟方法的原因。


http://www.kler.cn/a/1478.html

相关文章:

  • Unity3D使用GaussianSplatting加载高斯泼溅模型
  • Unity3d 基于Barracuda推理库和YOLO算法实现对象检测功能
  • Perturbed-Attention Guidance(PAG) 笔记
  • Vscode辅助编码AI神器continue插件
  • SQL概述
  • 什么是网络安全攻防演练,即红蓝对抗?
  • docker版jxTMS使用指南
  • 【MySQL】数据类型
  • EEPROM芯片(24c02)使用详解(I2C通信时序分析、操作源码分析、原理图分析)
  • 【LeetCode】1609. 奇偶树、1122. 数组的相对排序
  • 【C语言进阶】内存函数
  • Linux IPC:管道符的实现
  • 数据大放送之历史影像下载
  • SpringCloud微服务技术栈.黑马跟学(三)
  • Python04 数据序列-字符串
  • 动态规划-基础(斐波那契数、爬楼梯、使用最小花费爬楼梯、不同路径、不同路径II、整数拆分、不同的二叉搜索树)
  • Leetcode 6322. 检查骑士巡视方案 暴力模拟法 第337场周赛,第二题
  • Java学习星球,Java学习路线
  • 【数据结构】第三站:单链表
  • C语言实现单链表(超多配图,这下不得不学会单链表了)
  • 如何通过openssl生成公钥和私钥?
  • 人脸活体检测系统(Python+YOLOv5深度学习模型+清新界面)
  • elasticsearch 环境搭建和基本操作
  • ETH RPC搭建
  • echart图表之highcharts
  • vue2前端实现html导出pdf功能