【Java基础】 ⾯向对象编程三⼤特性 --封装、继承、多态

article/2025/9/18 13:40:38

文章目录

      • 封装
      • 继承
      • 多态

封装

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

通俗的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。

通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。但是如果⼀个类没有提供给外界访问的⽅法,那么这个类也没有什么意义了。

我们来看一个常见的 类,比如:Student

public class Student implements Serializable {private Long id;private String name;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

将对象中的成员变量进行私有化,外部程序是无法访问的。对外提供了访问的方式,就是set和get方法。

而对于这样一个实体对象,外部程序只有赋值和获取值的权限,是无法对内部进行修改

继承

继承 就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:

class 父类 {
}class 子类 extends 父类 {
}

继承概念的实现方式有二类:实现继承接口继承

实现继承是指直接使用基类的属性和方法而无需额外编码的能力

接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力

一般我们继承基本类和抽象类用 extends 关键字,实现接口类的继承用 implements 关键字。

注意点:

通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。

继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。

子类可以拥有父类的属性和方法。

子类可以拥有自己的属性和方法, 即⼦类可以对⽗类进⾏扩展。

子类可以重写覆盖父类的方法。

JAVA 只支持单继承,即一个子类只允许有一个父类,但是可以实现多级继承,及子类拥有唯一的父类,而父类还可以再继承。

使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。

# implements 关键字public interface A {public void eat();public void sleep();
}public interface B {public void show();
}public class C implements A,B {
}

值得留意的是: 关于父类私有属性和私有方法的继承 的讨论

这个网上 有大量的争论,我这边以Java官方文档为准:

With the use of the extends keyword, the subclasses will be able to inherit all the properties of the superclass except for the private properties of the superclass.

子类不能继承父类的私有属性事实),但是如果子类中公有的方法影响到了父类私有属性,那么私有属性是能够被子类使用的。

官方文档 明确说明: private和final不被继承,但从内存的角度看的话:父类private属性是会存在于子类对象中的。通过继承的方法(比如,public方法)可以访问到父类的private属性如果子类中存在与父类private方法签名相同的方法,其实相当于覆盖

个人觉得文章里的一句话很赞,我们不可能完全继承父母的一切(如性格等),但是父母的一些无法继承的东西却仍会深刻的影响着我们。

多态

同一个行为具有多个不同表现形式或形态的能力就是 多态。网上的争论很多,笔者个人认同网上的这个观点:重载也是多态的一种表现,不过多态主要指运行时多态

Java 多态可以分为 重载式多态重写式多态

-重载式多态,也叫编译时多态。编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。也就是说这种多态再编译时已经确定好了。

-重写式多态,也叫运行时多态。运行时多态是动态的,主要指继承父类和实现接口时,可使用父类引用指向子类对象实现。这个就是大家通常所说的多态性

这种多态通过动态绑定(dynamic binding)技术来实现,是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。也就是说,只有程序运行起来,你才知道调用的是哪个子类的方法。 这种多态可通过函数的重写以及向上转型来实现。

多态存在的三个必要条件:

继承

重写

父类引用指向子类对象:Parent p = new Child();

我们一起来看个例子,仔细品读代码,就明白了:

@SpringBootTest
class Demo2021ApplicationTests {class Animal {public void eat(){System.out.println("动物吃饭!");}public void work(){System.out.println("动物可以帮助人类干活!");}}class Cat extends Animal {public void eat() {System.out.println("吃鱼");}public void sleep() {System.out.println("猫会睡懒觉");}}class Dog extends Animal {public void eat() {System.out.println("吃骨头");}}@Testvoid contextLoads() {//一般老实人的写法Cat cat_ = new Cat();cat_.eat();//结果为:吃鱼cat_.sleep();//结果为:猫会睡懒觉。cat_.work();//结果为:动物可以帮助人类干活! 此处是 子类继承了父类的方法//==============================================Animal cat=new Cat();//多态的引用,即向上转型( 注意:向上转型一定是安全的。缺点:一旦向上转型,子类中原本特有的方法就不能再被调用了。	)cat.eat();//结果为:吃鱼。当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。cat.work();//结果为:动物可以帮助人类干活! Cat没有定义work方法,此处调的是父类的同名方法cat.sleep();//编译报错。 表明:当我们当子类的对象作为父类的引用使用时,只能访问子类中和父类中都有的方法,而无法去访问子类中特有的方法Animal dog=new Dog();dog.eat();//结果为:吃骨头。此处调用子类的同名方法。//===============================================//总结!!!://当使用多态方式调用方法时,首先检查父类中是否有该方法:如果没有,则编译错误;//                                            如果有,再去检查子类中是否有该方法:如果有,则调用子类的同名方法;//                                                                         如果没有,会去调父类的同名方法。//===============================================//如果想要调用父类中没有的方法,则要向下转型,这个非常像"强转"Cat cat222 = (Cat)cat;        // 向下转型(注意,如果是(Cat)dog 则会报错)cat222.sleep();        //结果为:猫会睡懒觉。 可以调用 Cat 的 sleep()}}

虚函数

补充一个概念:虚函数

虚函数的存在是为了多态。

Java 中其实没有虚函数的概念,它的普通函数就相当于 C++ 的虚函数,动态绑定是Java的默认行为。如果 Java 中不希望某个函数具有虚函数特性,可以加上 final 关键字变成非虚函数。


本篇文章到这里就结束啦,如果喜欢的话,多多支持,欢迎关注!更多精彩的文章


http://chatgpt.dhexx.cn/article/U3wLw0Vs.shtml

相关文章

Java基础知识之封装+继承+多态详解

前言 这篇博客是基于Java类和对象的基础之上的相关知识点。因为特别重要且语法规则较多,所以想单独总结方便之后复习。 本篇博客涉及知识点思维导图: 目录 1.封装 2.继承 3.多态 1.封装 生活中有很多东西我们并不想让其它人知道,比如我的身…

封装、继承和多态

目录 前言一、什么是封装?二、什么是继承?三、什么是多态? 前言 其实封装、继承和多态不仅仅是java的特性,而是所有面向对象程序的三大特性。 一、什么是封装? 封装就是对类内部的实现细节进行隐藏,然后…

封装、继承、多态 详解

面向对象的三个基本特征:封装、继承、多态 1.封装 (1)封装是实现面向对象的第一步,封装就是将数据或函数等集合在一个单元中(类)。被封装的对象通常被称为抽象数据类型。 (2)类具…

面向对象编程三大特性------封装、继承、多态

一、封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节&am…

人脸识别API接口 活体检测 人证比对 人身核验

技术原理 l通过自拍获得自拍照,或者通过活体SDK获得活体照片; l通过姓名、身份证号获得公安带网纹照片,通过去网纹技术得到清晰照片; l自拍照或者活体照片与公安照片进行比对; l确认用户与比对证件为同一人。 适用…

浅谈私有云端的人脸识别与人证比对

人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。 而私有云人脸识别人证对比系统是一款基于…

论文精读|大规模双样学习用于人证比对

点击上方“AI公园”,关注公众号 之前分享过Docface,Docface,这篇是在Docface之前的一篇文章,也是专门处理人证比对问题,也是用到了imprint的技术,Docface就是参考了这篇文章中的imprint。 Large-scale Bisample Learni…

基于人脸识别开发人证比对访客系统

2019独角兽企业重金招聘Python工程师标准>>> 原作者 panmingzhi 最近有个小区用到了虹软的人脸识别,效果还不错。又有一个项目要用人证访客对比,分享一下项目,希望可以帮到有需要的。 码字前先上项目地址:https://gite…

人脸识别技术开发人证比对访客系统

原作者 panmingzhi 最近有个小区用到了虹软的人脸识别,效果还不错。又有一个项目要用人证访客对比,分享一下项目,希望可以帮到有需要的。 码字前先上项目地址:https://gitee.com/panmingzhi/IdCardFaceIdentifier 首先是读证的问题…

人脸识别、人证比对核验数据特点

一、人证合一验证系统产品简介: 人证合一验证系统是一套利用专业证件扫描设备和身份证阅读机具,实现采集持证人相片与所持证件人相关信息发送至公安部身份证副本库进行生物特征比对,验证人与证是否一致的软硬件结合系统。 从技术上基本解决了这两个主要问题:利用经公安部…

双目活体检测摄像头|离线式人证比对|人脸识别SDK

产品概述 中安未来双目防伪人证核验设备(TH-DE300)是一款基于中安未来自主独立研 发的双目多光谱生物识别技术,打造的一体化终端产品,主要适用于需要进行人证合一验证 的业务场景,对被验证人员身份进行验证。如防止冒用他人办理业务、刷脸控制…

人脸识别人证比对技术SDK

人脸识别人证比对技术SDK 人脸识别人证比对技术SDK 一、人脸识别人证比对技术1:1及1:N概念 人脸识别人证比对技术1:1如我们现在在宾馆、网吧、机场安检等的人与身份证上的照片进行比对的应用,用来证明自己是自己。想想,目前我们在…

人证比对的解决方案

人证比对的解决方案 目前,人证比对应用的场景很多:机场、高铁站过安检;P2P的软件注册;酒店、网吧、手机营业厅、银行开户;以及政府单位的一些柜台。1:1人脸比对有着用户量大、行业广、比对速度快、精准、使用方便、成本…

PockerFace 离线版人证比对 SDK 编程指南

深圳市喜汇信息科技有限公司(PockerFace)是一家通过深度学习框架打造新一代人脸识别技术的科技创新公司,具有完全自主知识产权的核心技术,在人脸检测、人脸识别、人脸属性检测、活体检测、人脸搜索等多个领域均有原创性创新。检出率、错检率、误检率、检…

人脸识别算法源码SDK开发包人证比对二次开发检测核验开发包

人脸识别算法源码SDK开发包人证比对二次开发检测核验开发包 ID:89120059902830359120170116926

人脸识别|人证比对《DocFace+: ID Document to Selfie Matching》论文解读

请点击上方“AI公园”,关注公众号 【导读】这是之前那篇DocFace的后续,作者在原来的基础上进行了升级,效果更佳,而且开源了代码。 代码:https://github.com/seasonSH/DocFace 摘要:日常生活中需要大量的出示…

利用人脸识别SDK实现人证比对全过程

人证比对在如今的社会中随处可见,如高铁、飞机、酒店入住、甚至景区入口都可以看到各种各样的人证应用,人脸识别SDK的也如雨后春笋一般层出不穷,如百度、商汤、Face++、虹软等。在尝试使用各家的SDK之后,最让我青睐的要数虹软科技的SDK了,最直接的一个原因就是虹软承诺永久…

人证核验、人证比对系统应用行业如何判别

一、人证合一验证系统产品简介: 人证合一验证系统是一套利用专业证件扫描设备和身份证阅读机具,实现采集持证人相片与所持证件人相关信息发送至公安部身份证副本库进行生物特征比对,验证人与证是否一致的软硬件结合系统。 从技术上基本解决…

1.Oracle 安装教程及使用

1.win10 安装Oracle19c 详细步骤 链接资源: https://blog.csdn.net/qq_39915083/article/details/107055864? 2.wind10 安装oracle 11g教程完整版 链接资源: https://blog.csdn.net/qq_36205206/article/details/117170099? 备注:以上安…

oracle的安装教程

这里介绍oracle在64位操作系统上的的安装教程: 1、首先到官网https://www.oracle.com/index.html上去下载oracle64位的安装程序,将两个程序解压到同一目录中。如下图所示: 2、下载完成后,将2个压缩文件一起选中,鼠…