封装、继承和多态

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

目录

  • 前言
  • 一、什么是封装?
  • 二、什么是继承?
  • 三、什么是多态?

 

前言

其实封装、继承和多态不仅仅是java的特性,而是所有面向对象程序的三大特性。

一、什么是封装?

封装就是对类内部的实现细节进行隐藏,然后对类外提供公开的接口。

在Java中主要通过访问权限来实现封装, 访问权限用来控制方法或者属性能否直接在类外使用。Java中提供了四种访问限定符:

27d5ce9f42e043cf9762ff811f749ef2.png

封装一般就是我们把类属性加上private进行修饰,把属性进行私有化。 

public class Student {private String name;private int age;private int classid;
}

在这个学生类中,我们把name和age以及classid属性被设置为私有的,那么它只能被这个类访问,而不能被其他类访问,因此信息是隐藏的。为了让外部进行访问,我们还可以为每个属性提供公开的方法:Getter and Setter

ea8bc6ae61934922a1fdd33cb5acedf7.png

 public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getClassid() {return classid;}public void setClassid(int classid) {this.classid = classid;}

因此,如果外部类想要访问类中私有成员变量的都必须使用这些getter和setter方法。

封装的优点:良好的包装可以减少耦合;类的内部结构可以自由修改;可以更精确地控制成员变量;隐藏信息和实现细节。

 

二、什么是继承?

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

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

继承其实是父类对子类的共性的抽取, 实现代码的复用。

5c0d320dec5044b8ad873ab41e81313a.png

 6340ca73a05e4a0e832cc18a6ed340d5.png

 

 bc667afdb2e345d39e2dbba44bc65f1c.png

 

子类中访问父类的成员变量

如果访问的成员变量子类中有,优先访问自己的成员变量。
如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错。
如果访问的成员变量与父类中成员变量同名,则优先访问自己的。
成员变量访问遵循就近原则,自己有优先自己的,如果没有则向父类中找

子类中访问父类的成员方法

通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到 则访问,否则编译报错。
通过派生类对象访问父类与子类同名方法时,如果父类和子类同名方法的参数列表不同(重载),根据调用方法适传递的参数选择合适的方法访问,如果没有则报错;

如果子类中存在与父类中相同的成员时,那么在子类中访问父类相同名称的成员就需要使用super关键字。super关键字的主要作用:在子类方法中访问父类的成员。了解super可以参考这篇文章。

super和this有什么区别?-java_crazy__xieyi的博客-CSDN博客

三、什么是多态?

一个引用调用同一个方法,因为这个引用 引用的对象不一样,导致调用这个方法,所表现出来的行为不一样。这种思想就叫做多态。

在java中要实现多态,必须要满足如下几个条件,缺一不可:
1. 必须在继承体系下
2. 子类必须要对父类中方法进行重写
3. 通过父类的引用调用重写的方法
多态体现:在代码运行时,当传递不同类对象时,会调用对应类中的方法。
public class Animal {String name; int age;public Animal(String name, int age){this.name = name;this.age = age;}public void eat(){ //重写了eat方法System.out.println(name + "吃饭");}
}
public class Cat extends Animal{public Cat(String name, int age){super(name, age);}@Override   //重写了eat方法public void eat(){System.out.println(name+"吃鱼~~~");}
}public class Dog extends Animal {public Dog(String name, int age){super(name, age);}@Overridepublic void eat(){System.out.println(name+"吃骨头~~~");}
}///分割线//public class TestAnimal {// 编译器在编译代码时,并不知道要调用Dog 还是 Cat 中eat的方法// 等程序运行起来后,形参a引用的具体对象确定后,才知道调用那个方法// 注意:此处的形参类型必须时父类类型才可以public static void eat(Animal a){a.eat();}public static void main(String[] args) {Cat cat = new Cat("元宝",2);  Dog dog = new Dog("小七", 1);eat(cat); //元宝吃鱼eat(dog); //小七吃骨头}
}
在上述代码中, 分割线上方的代码是 类的实现者 编写的, 分割线下方的代码是 类的调用者 编写的.
当类的调用者在编写 eat 这个方法的时候, 参数类型为 Animal (父类), 此时在该方法内部并 不知道 , 也不关注当前的 a 引用指向的是哪个类型(哪个子类)的实例. 此时 a这个引用调用 eat方法可能会有多种不同的表现(和 a 引用的实例相关), 这种行为就称为 多态。

 

 


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

相关文章

封装、继承、多态 详解

面向对象的三个基本特征:封装、继承、多态 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个压缩文件一起选中,鼠…

如何安装Oracle--新手安装Oracle教程

首先我们来了解一下Oracle: Oracle是一个数据库管理系统,类似于MySql和Sql Server,它是Oracle公司的核心产品。因为该公司在信息管理系统、企业数据处理、Internet及电子商务等领域使用非常广泛,其在数据安全性与完整性控制方面的优越性能比较…

非常好的Oracle基础教程

http://www.blogjava.ne 字符串函数 LENGTH() 字符长度 LENTTHB() 字节长度;一个汉字内存中占用 2字节 LTRIM、RTRIM、TRIM 截串 SUBSTR(表达式,位置,长度) Oracle 无左右取串函数,但可以使用变通方式完成。 左取串&#…