java基础系列 -- 类的三大特性:封装、继承、多态

2023-11-08

java类的特性

​ 类有三大特性:封装、继承、多态

封装

​ 封装就是将类的某些属性隐藏起来,限制在类的外部对类内部成员进行访问,通过接口对外开放,但是在外部不能直接进行查找属性。只通过公共接口来访问类的成员数据。为什么要设置隐藏:

  • 隐藏数据是为了限制外界对属性的直接修改
  • 通过接口操作可以在接口上附加额外的逻辑处理来控制隐藏数据

封装的实现

  • 需要修改属性的访问控制符(修改为private);
  • 创建getter/setter方法(用于属性的读写);
  • 在getter/setter方法中加入属性控制语句(用于判断属性值的合法性)

继承

​ 继承是复用程序代码的有力手段,当多个类之间存在相同的属性和方法时,可从这些类抽象出父类SuperClass。

[<修饰符>] class <子类名> extends <超类名>{ 
    子类体 
}

继承原则:

  • 父类中private修饰的私有变量和方法,子类不能继承;
  • 父类的构造方法子类不能继承
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
  • 子类可以用自己的方式实现父类的方法
  • 子类的成员变量和超类的成员变量同名时,超类的成员变量被隐藏(不能继承)
  • 不能被继承的类称为最终类,不能被继承。 如:final class Last;
  • 用final说明的成员方法为最终方法,不能被继承。 如:public final void printsuper( )

多态

​ 多态是同一个行为具有多个不同表现形式或形态的能力。多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定。这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变。多态有两种表现形式:

  • 同一类中的方法多态,称为方法重载overloading(静态多态性):同一类中允许多个同名方法,区分要点:参数的个数不同,或者是参数类型不同,或者是参数的顺序不同

  • 子类对父类方法的重新定义,称为方法覆盖overriding (动态多态性) :方法名、返回值和参数形态完全一样。

  • 父类的引用变量指向子类的对象(向上转型)

    1、子类中重写的方法和父类中被重写的方法要具有相同的名字,相同的参数表和相同的返回类型,只是函数体不同

    2、子类方法不能缩小父类方法的访问权限

    3、子类方法不能抛出比父类方法更多的异常

    4、方法覆盖只存在于子类和父类(包括直接父类和间接父类)之间。在同一个类中方法只能被重载,不能被覆盖。

    5、父类的静态方法不能被子类覆盖为非静态的方法,反之亦然;

    6、子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法。

    7、父类的私有方法不能被覆盖

    8、父类的抽象方法可以被子类覆盖:子类实现父类的方法或重新声明父类的抽象方法。

抽象类

abstract class <类名>{
	成员变量; 
        方法(){ 方法体 }//定义一般方法 
        abstract 方法( ); //定义抽象方法 
}

abstract关键字:可修饰类和方法,被修饰的类称为抽象类,被修饰的方法称为抽象方法

  • 抽象类是专门设计来让子类继承的类。
  • 抽象类提供一个类型的部分实现,可以有实例变量,构造方法,抽象方法和具体方法。一个抽象类不会有实例。
  • 抽象方法是必须被子类覆盖的方法。如果一个类不具有抽象属性,不能在该类中定义抽象方法。
  • 对于成员方法,不能同时用static和abstract说明。对于类,不能同时用final和abstract说明。

接口

[public] interface 接口名 [extends 父接口名列表 ]  { 
    常量的数据类型 常量标识符 = 常量值 ;  //常量声明 
    返回类型 方法名(参数列表) [throws 异常列表]//抽象方法声明      
}    
  • 在Java中,一个类只能有一个超类。但Java提供了接口用于实现多重继承,一个类可以有一个超类和多个接口
  • 接口只包括常量定义和抽象方法。
  • 接口具有继承性,一个接口还可以继承多个父接口,父接口间用逗号分隔。
  • 系统默认,接口中所有属性的修饰都是 public static final,也就是静态常量。
  • 系统默认,接口中所有方法的修饰都是 public abstract。
  • 当一个类实现了一个接口,它**必须实现接口中所有的方法,**这些方法都要被说明为public,否则会产生访问权限错误。

接口和抽象类区别

  • 接口可以多重继承,抽象类不可以
  • 抽象类内部可以有实现的方法,接口则没有实现的方法
  • 接口与实现它的类不构成类的继承体系,即接口不是类体系的一部分。因此,不相关的类也可以实现相同的接口。而抽象类是属于一个类的继承体系,并且一般位于类体系的顶层
  • 接口的优势:通过实现多个接口实现多重继承,能够抽象出不相关类之间的相似性。
    创建类体系的基类时,若不定义任何变量并无需给出任何方法的完整定义,则定义为接口;必须使用方法定义或变量时,考虑用抽象类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java基础系列 -- 类的三大特性:封装、继承、多态 的相关文章

  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • JavaFX - 为什么多次将节点添加到窗格或不同的窗格会导致错误?

    我现在正在学习基本的 JavaFX 我不明白我正在阅读的书中的这一说法 不 诸如文本字段之类的节点只能添加到一个窗格中一次 将节点添加到多次窗格或不同的窗格将导致运行时错误 我可以从书中提供的UML图看出它是一个组合 但我不明白为什么 库类
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • Java:由 HTTP 连接创建的等待连接线程存活时间很长

    我有一个服务器端代码 用于检查 SOAP 服务是否已启动 代码如下 String response while response length 0 try final URL url new URL DummySoapServiceURL
  • 使用 JAD 反编译 java - 限制

    我正在尝试使用 Java 中的 JAD 反编译几个 jar 文件 我也尝试过 JD GUI 但运气更差 但出现了很多错误 一种类型 易于修复 似乎是内部类 但我也发现了这段代码 static int SWITCH TABLE atp com
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • 为什么这个私人浮动字段变为零?

    我有一些奇怪的行为 我很难向自己解释 称为 textureScale 的浮点字段变为零 如果某些代码正在更改该值 则可以解释这一点 然而 我希望能够通过将其设置为 私有最终浮点 来导致构建失败 或者至少是运行时异常 那么无论更改该值都将失败
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 春季 CORS。在允许的来源中添加模式

    查看CORS的弹簧指南 以下代码启用所有允许的来源 public class MyWebMVCConfigurer extends WebMvcConfigurerAdapter Override public void addCorsMa
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • Java、Spring、Hibernate找不到org.springframework.orm.hibernate3.LocalSessionFactoryBean

    我正在尝试制作 spring hibernate ant 项目 目前我收到此错误 HTTP Status 500 type Exception report message description The server encountere
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框

随机推荐

  • 机器学习概率论相关学习笔记

    一 什么是均值 在概率论中 均值是指随机变量的期望值 也称为数学期望 它是对随机变量可能取值的加权平均 其中权重是每个可能取值发生的概率 对于离散型随机变量 均值的计算公式为 x P x 其中 x表示随机变量可能的取值 P x 表示随机变量
  • 蓝桥杯—单片机第十四届底层驱动函数修改

    本文总结了关于14届蓝桥杯单片机底层驱动文件相较13届的变化所需作出的改变 总体区别不大 欢迎批评指正 1 不再提供 h文件 故要牢记头文件书写格式 与引用格式 添加步骤 2 Onewire c文件 1 头文件添加 include reg5
  • 如何分解质因数

    如何分解质因数 质数 因数 合数 和倍数的知识 的结构图 在小学数学里 两个正整数相乘 那么这两个数都叫做积的因数 或称为约数 质数 是指只能被1和自己整除的自然数 其余的叫做合数 上小学的时候 我们就知道所有的 自然数可以分为质数 素数
  • MIPI CSI相关计算

    本文介绍MIPI CSI相关计算 MIPI CSI为目前Image Sensor和Host连接常用的接口 目前MIPI CSI最高传输速率为2 5Gbps lane 也有一些低版本的最高传输速率为1 5Gbps lane 我们在连接Imag
  • Ubuntu中安装Pytorch

    第一步 为PyTorch单独创建conda环境 需要先创建一个单独的conda环境 用于匹配对应的PyTorch版本 这一步不是必须的 但可以很方便的为PyTorch创建一个干净且独立的Python环境 这里使用比较稳定的3 6版本的Pyt
  • 利用python的matplotlib画图技巧

    目录 1 如何完全显示所有刻度 2 修改jupyter notebook输出图片大小 1 如何完全显示所有刻度 如果我们在没有设置坐标轴刻度的情况下 显示坐标情况及代码如下所示 import matplotlib pyplot as plt
  • sonarLint使用

    转载 sonarLint使用 mine wz的博客 CSDN博客
  • 深度学习(32)随机梯度下降十: 手写数字识别问题(层)

    深度学习 32 随机梯度下降十 手写数字识别问题 层 1 数据集 2 网络层 3 网络模型 4 网络训练 本节将利用前面介绍的多层全连接网络的梯度推导结果 直接利用Python循环计算每一层的梯度 并按着梯度下降算法手动更新 由于Tenso
  • Vue-router history模式下Nginx配置

    对于VUE的router mode history 模式 这里主要是为了去除链接上的 开发的时候 一般都不出问题 是因为开发时用的服务器为node Dev环境中已配置好了 nginx运行的时首页没有问题 链接也没有问题 但在点击刷新后 页面
  • 更改WPS云文档数据存储位置

    WPS的默认位置在C盘 当我们文档数据比较多 文件的体积也越来越大时 就会占用C盘的存储空间 下面为更改WPS云文档数据存储位置的具体步骤 双击 WPS网盘 进入WPS网盘界面 在界面右上方的 更多 中选择 同步与设置 选择 设置 在 缓存
  • 【计算机视觉笔记】图像检索学习 (Content Based Image Retrieval)

    论文跟踪 Awesome image retrieval papers https github com willard yuan awesome cbir papers 综述 SIFT Meets CNN A Decade Survey
  • 白嫖 GitHub Pages,轻松搭建个人博客

    Hexo 是一个快速 简单且功能强大的博客框架 使用 Markdown 解析文档 Hexo 能在几秒内生成带有自定义主题并集成各项功能的网站页面 本文采用 Github Pages Hexo 的方式 搭建个人博客 零 准备工作 1 使用个人
  • QT通过parentWidget()实现多界面跳转及关闭(切换界面和返回前一界面)

    QT通过parentWidget 实现多界面跳转及关闭 切换界面和返回前一界面 不需要跳转界面相互包含头文件 超简单的方法 先将第一级的窗口this指针传给次级的的窗口 子窗口通过parentWidget 返回第一级的this并用来调用sh
  • (五)复函数积分的定义与性质

    本文内容主要如下 1 复积分的概念 1 1 复积分的定义 1 2 复积分的存在性与计算 1 3 一个圆周上的重要积分公式 1 4 复积分的基本性质 1 复积分的概念 1 1 复积分的定义 定义 如图 C为平面上一条光滑的简单曲线 z z
  • k8s集群pod直接无法ping通

    简介 基于OpenStack云主机搭建的k8s集群 网络CNI选用的calico 使用的是BGP模式 pod直接无法ping通 宿主机也无法ping通pod 排除后发现不是安全组的原因 应该是OpenStack的网卡默认会丢掉非本网卡ip地
  • WSL2-解决无法ping通主机/配置使用主机代理

    WSL2无法ping通主机 省流 如果主机能ping通wsl从机 从机ping不通主机 大概率是防火墙拦截了 可以以管理员身份在powershell中运行下面的代码 或者手动在防火墙设置中添加相应的出入站规则 New NetFirewall
  • 音频-基于Core Audio技术采集音频(版本1)

    这个是第一次版本优化 优化是简单易懂 代码 WindowsAudioSession cpp 基本的利用WAS采集音频的demo include
  • extern关键字作用

    语法 extern放在变量和函数声明之前 表示该变量或者函数在别的文件中已经定义 提示编译器在编译时要从别的文件中寻找 除此之外 extern还可以用来进行链接指定 作用 声明外部变量 在声明全局变量时 不同的文件在编译器编译时是不透明的
  • 字节流与字符流

    流是个抽象的概念 是对输入输出设备的抽象 输入流可以看作一个输入通道 输出流可以看作一个输出通道 输入流是相对程序而言的 外部传入数据给程序需要借助输入流 输出流是相对程序而言的 程序把数据传输到外部需要借助输出流 字节流 传输过程中 传输
  • java基础系列 -- 类的三大特性:封装、继承、多态

    java类的特性 类有三大特性 封装 继承 多态 封装 封装就是将类的某些属性隐藏起来 限制在类的外部对类内部成员进行访问 通过接口对外开放 但是在外部不能直接进行查找属性 只通过公共接口来访问类的成员数据 为什么要设置隐藏 隐藏数据是为了