面向对象的三大特性:封装、继承、多态

一、封装

封装是面向对象的核心思想。是以类为载体,将对象的属性和行为封装起来,对外隐藏其实现细节。

封装保证了类内部数据结构的完整性,使得外部(使用该类的用户)不能轻易地直接操作此数据结构,只能执行该类的允许的公开的数据(一般指方法);从而避免外部操作对内部数据的影响,提高了程序的可维护性。

二、继承

继承主要使利用特点对象之间的共有特性,将这些共有特性抽象出来作为基类,让继承该基类的其他类都拥有该基类的特性,而不需要重复实现,同时还可以自定义各自的特有能力和属性。如:麻雀和雕都是鸟类,鸟类都有翅膀,并且可以飞。就可以将鸟类作为基类抽象出来,麻雀和雕都继承鸟类后,就继承了鸟类的翅膀属性(变量)和飞的能力(方法),同时麻雀可以自定义自己吃虫子的能力,而雕自定义自己吃肉的能力。继承原有的功能,增加自己新的功能,实现了拓展和复用。

Java中,继承使用 extends 关键字来实现,其中Java规定了java.lang.Object 类作为所有的类直接或间接的父类(当类没有继承其他类时,java默认继承Object类,当类继承了其他类时,可以向上追溯,最终继承的类就是Object类)。java规定类只能继承一个类,但是一个类可以被多个类继承(一个子类只能有一个直接父类,一个父类可以有多个子类),类之间可以有多层的继承关系,直接继承的是直接父类,父类的父类就是间接父类,而最上层就是Object。

注:

1、extends:单一继承,可以让一个类继承一个父类

2、super:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。

3、this:指向自己的引用。引用自身的属性和方法。

4、final:当用final修饰类时,是把类定义为不能继承的,即最终类;
用于修饰方法时,该方法不能被子类重写;
用于修饰属性时,该属性不可被二次赋值。

三、多态

1.类的多态:

将父类对象应用于子类的特征就是多态。

如上述鸟类的例子,将子类麻雀和雕的对象都看作是父类的实例对象,当鸟类在吃东西时,就会有不同的表现形式,这就是多态的基本思想,向上转型

instanceof向下转型的关键字。在向上转型后,父类对象无法调用子类对象特有的方法,所以有了向下转型。

class Animals {public void sound(){System.out.println("动物的叫声");}
}
class Dog extends Animals{@Overridepublic void sound() {System.out.println("汪汪汪~~~");}public void eat(){System.out.println("狗在吃骨头");}
}
class Cat extends Animals{@Overridepublic void sound() {System.out.println("喵~~~");}public void play(){System.out.println("猫在玩耍");}
}
class Test{public static void main(String[] args) {//向上转型Animals a = new Dog();// Animals a = new Cat();a.sound();//a.eat()方法时无法调用的,如果使用需要向下转型//向下转型,先判断属于Dog还是Cat的实例,属于谁的实例就转型成谁if(a instanceof Dog){Dog dog = (Dog) a;dog.eat();} else if (a instanceof Cat) {Cat cat = (Cat)a;cat.play();}}
}

2.方法的多态

重写

发生在子类上,子类重写父类的方法,方法名、参数、返回值均相同。

重写与重载

重载发生在同一个类内部,方法名相同,参数数量或参数类型必须有不同,返回类型可以相同可以不同。

1、重写(Override)重写是子类对父类允许访问的方法进行重写, 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类子类和父类在同一个包中,那么子类可以重写父类除了声明为 private 和 final 的方法外的所有方法子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。访问权限不能比父类中被重写的方法的访问权限更低。父类的成员方法只能被它的子类重写,子类能够根据需要实现父类的方法重写方法抛出的异常范围不能大于父类。异常也有继承关系,所以子类能抛出的异常不能高于父类参数列表与被重写方法的参数列表必须完全相同。声明为 final 的方法不能被重写。声明为 static 的方法不能被重写,但是能够被再次声明。构造方法不能被重写。如果不能继承一个类,则不能重写该类的方法。
2、重载(Overload)重载是在一个类里面,方法名字必须相同,而参数必须不同。返回类型可以相同也可以不同。被重载的方法可以改变返回类型;被重载的方法可以改变访问修饰符;被重载的方法可以声明新的或更广的检查异常;无法以返回值类型作为重载函数的区分标准。
3、方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。方法重载是一个类中定义了多个同名的方法,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载方法重写是在子类存在方法与父类同名的方法,而且参数的个数与类型一样,就称为重写方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/10454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

考了PMP后,NPDP到底还有没有必要考?NPDP通关宝典来啦!

NPDP和PMP相比,两者的相同点都是由美国发起的,都是管理行业的证书。区别也很大,PMP是项目经理国际认证证书,NPDP是产品经理认证证书,不过PMP已经由外专局引入国内二十多年了,在市面上知名度更高&#xff0c…

svg 元素 getBoundingClientRect() 数值为 0

问题 在页面在刷新时,想要立即获取页面中 svg 元素的宽高,做进一步的计算。发现通过 getBoundingClientRect 获取会有一定几率获取值为 0。 解决方案 监听 svg 元素的 load 事件,在回调中再获取。 svgElem.addEventListener("load&…

Vite创建Vue3项目识别 ../ 与 @/ 引入路径

在使用vite脚手架生成项目时,会出现一些引入路径失败的错误 例子:router中用 component引入路径时 引入 ../ 路径失败 找不到模块“../views/login/index.vue”或其相应的类型声明 {path: "/login",name: "login",component: () > import("../v…

鸿蒙开发接口Ability框架:【(窗口扩展能力)】

窗口扩展能力 WindowExtensionAbility基于ExtensionAbility,WindowExtensionAbility中展示的内容作为一个控件(AbilityComponent)内容展示在其他应用窗口中,实现在一个窗口中展示多个应用程序内容的功能。 说明: 本模块首批接口从API versio…

互斥锁和自旋锁的实现机制

本文介绍互斥锁和自旋锁的实现原理和工作过程 一、互斥锁 1.内存标记——线程id 互斥锁会记录下访问锁的线程的id,用于进行线程切换、组织阻塞队列等操作 2.阻塞队列 当多个线程试图获取同一把互斥锁,没有获取的锁的线程会被组织到阻塞队列中&#…

Keysight 是德 N1077B 光/电时钟恢复设备,收藏保存

Keysight N1077B是一款光/电时钟恢复设备,支持115 MBd至24 GBd的数据速率范围,适用于多模和单模光信号以及电信号。该设备能够处理PAM4和NRZ两种类型的数据信号,并提供符合标准的时钟恢复功能。 N1077B具备可调峰值和环路带宽(高…

leetcode206-Reverse Linked List

题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 分析 用一个指针记录当前位置,另外一个指针记录当前位置的前一个位置&#xff0c…

【经验分享】图片自适应窗口大小css;CSS实现背景图片全屏铺满自适应的方式

目录 设置背景颜色和边距 设置背景图片 调整背景图片尺寸和位置 完整代码 使用效果如下(展示) 网页版图片效果展示 手机版图片效果展示 如何使用 CSS 创建网页背景效果 在网页设计中,背景是一个重要的视觉元素,它可以为网…

39-5 入侵检测系统(IDS)- 安装配置IDS(注意我没安装成功,阅读需谨慎)

官网:Snort Rules and IDS Software Download 参考: (这位大佬分享了安装包下载链接):https://www.cnblogs.com/taoyuanming/p/12722263.html (安装过程参考这位大佬):Snort 安装与配置(CentOS 7)_centos 7 snort-CSDN博客一、安装 IDS(我这里在 CentOS 7 虚拟机中安…

【高校科研前沿】北师大陈晋教授团队在遥感顶刊发表最新成果:ClearSCD模型:在高空间分辨率遥感影像中综合利用语义和变化关系进行语义变化检测

01文章简介 论文名称:The ClearSCD model: Comprehensively leveraging semantics and change relationships for semantic change detection in high spatial resolution remote sensing imagery(ClearSCD模型:在高空间分辨率遥感影像中综合…

深度访谈:为何满意度调查中重点客户推荐企业选择此方式?

在竞争激烈的市场环境中,企业为了不断提升服务质量、巩固客户关系,常常需要进行满意度调查。然而,传统的问卷调查和电话访问虽便捷,却难以触及客户的真实感受与期望。尤其对于重点客户而言,他们的需求和反馈更是企业持…

DNS之区域文件

区域文件 BIND(Berkeley Internet Name Domain)是最广泛使用的DNS服务器软件,它可以将人类可读的网站名称转换为互联网上的IP地址。在BIND中,你可以创建和编辑区域文件,以定义DNS服务器应如何解析特定的域名。 区域文件…

x6.js bug记录-流程图json数据导入进来之后拖拽节点,节点直接飞走了

添加josn数据进来之后虽然能正常渲染,但是只要一拖拽,则节点就直接飞走了,看不到了。 找了一下午的问题,最后发现。保存的json坐标位置是字符串类型,而这边的位置必须是数字类型。如下: {position: { x: &…

Celery Redis 集群版连接和PyCharm启动配置

目录 使用Redis cluster版作为broker原因 PyCharm配置 使用Redis cluster版作为broker 在celery5及其之前版本,需要配置如下才可行 celery_app.conf.update( broker_transport_options{“global_keyprefix”: “{celery}:”}, ) 原因 https://github.com/celery/…

linux安装drm

apt 安装 sudo apt install libdrm-dev源码安装 安装工具 python3 -m pip install mesonpython3 -m pip install ninja源码编译 git clone https://gitlab.freedesktop.org/mesa/drm.gitmkdir buildmeson setup build --prefix$HOME/.drm/install# 或 重新配置到/usr/local# m…

【力扣】LCR 166.珠宝的最高价值

原题链接:. - 力扣(LeetCode) 目录 1.题目描述 2.思路分析 3.代码实现 1.题目描述 现有一个记作二维矩阵 frame 的珠宝架,其中 frame[i][j] 为该位置珠宝的价值。拿取珠宝的规则为: 只能从架子的左上角开始拿珠宝…

vue3+TS或JS, 实现粒子特效 @tsparticles/vue3

在跟着B站视频BV11s4y1a71T学习时,使用到了粒子效果,但是以下这种情况只适用于项目是基于typescript的写法,否则无法实现。 粒子效果 VUE3TStsparticles/vue31、安装2、main.ts 引入3、App.vue4、效果 VUE3JS非最新版1、安装低版本的vue3-pa…

【SpringBoot记录】自动配置原理(3):自动配置注解

前言 如果对注解有不太了解的,先行了解注解。这里做个简单的说明,个人理解注解就是对类、接口、方法、属性等添加一个标识,这些标识可以被编译器、开发工具或运行时环境识别,识别后即可在不改变原业务逻辑的情况下进行一些特定的…

【Web后端】jsp基础知识_请求转发和重定向

1.jsp基础知识 1.1简介 java server page&#xff0c;运行在服务器端的页面java代码html代码java代码全部都放在<%%>中间 1.2jsp表达式 作用&#xff1a;将动态信息显示在页面上&#xff0c;以字符串方式&#xff0c;返回给浏览器端语法&#xff1a;<%变量或表达式…

使用xtuner微调InternLM-Chat-7B

1. 安装xtuner #激活环境 source activate test_llm # 安装xtuner pip install xtuner#还有一些依赖项需要安装 future>0.6.0 cython lxml>3.1.0 cssselect mmengine 2. 创建一个ft-oasst1 数据集的工作路径&#xff0c;进入 mkdir ft-oasst1 cd ft-oasst1 3.XTune…