Java面向对象——三大特性

摘要:本文主要介绍了面型对象的三大特性。

封装

什么是封装

封装,就是指一个类隐藏了对象的属性和实现细节,对自己的数据和方法进行访问权限控制,只允许某些类和对象进行访问和使用,其他的类不能进行访问和使用。

封装是面向对象的特征之一,是对象和类概念的主要特性。简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。

在一个类的内部,某些代码或某些数据是私有的,不能被外界访问。通过这种方式,类对内部数据提供了不同级别的保护,以防止类中的私有数据被外部程序窃取和改动。

有什么好处

良好的封装能够减少耦合。耦合,指的是模块间的关联程度,封装可以使模块变得更加独立,降低了耦合度。

封装后的类,在类内部可以自由修改代码,不会影响外部的代码。

对类的成员进行精确的访问控制。

访问控制

public:公共访问权限。属性可以被所有类和对象访问,没有进行封装。

private:私有访问权限。只能在这个类中被访问,对属性和方法进行彻底的封装。

protected:继承访问权限。可以被子类访问,封装的不彻底。

一般来说,如果类中的某个属性不是公有的,而外部程序又需要访问,那么可以提供一个公有的方法,外部程序可以通过调用方法实现对该属性的间接访问。

继承

什么是继承

继承,指的是子类可以获得父类的属性和方法,并且可以在不影响父类代码的前提下,在子类里面对继承的方法进行改写,扩展添加父类里面没有的方法。

Java的继承是单继承,一个父类只能有一个子类,一个子类也只能有一个父类。

有什么好处

子类可以直接使用父类的属性和方法,不需要重复编写代码,提高了代码的可重用性。

特点

Object类是所有类的基类,所有的类都直接或间接继承了Object类,所以具备Object类的方法。

子类不可以继承父类的构造方法,但子类必须调用父类的构造方法。

子类的构造方法中默认调用父类的无参构造,如果父类没有无参构造,报编译错误。

子类用super调用父类的有参构造方法。

多态

什么是多态

多态,是指一个方法或一个对象具备多种表现形式。

多态的体现

多态主要变现在两个方面:引用多态和方法多态。

引用多态,即对象的向上转型,父类的引用指向子类的对象。

方法多态,即子类重写了父类的方法,子类在调用该方法的时候调用的是子类重写的方法,父类在调用该方法的时候调用的是父类的方法。

如果我们在子类中扩展了一个父类没有的方法,就不能通过父类的引用创建的子类对象来调用该方法。

引用类型转换

向上类型转换(自动类型转换): Animal animal = new Dog(); 。

小类型转换成大类型。

子类创建的实例指向父类的引用。

向下类型转换(强制类型转换): Dog dog = (Dog) animal; 。

大类型转换成小类型,有可能导致溢出。

子类的引用指向父类的引用。

如果将子类的引用指向父类创建的实例 Dog dog = (Dog) new Animal(); ,在编译时不会报错,但是在运行时会报错。

instanceof运算符

使用instanceof运算符来解决引用对象的类型,避免类型转换的安全性问题。

它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。

在写程序的时候,如果要进行类型转换,我们最好使用instanceof运算符来判断它左边的对象是否是它右边的类的实例,再进行强制转换。

注意

继承是多态实现的基础。

Java面向对象——三大特性的更多相关文章

  1. 夯实Java基础系列1:Java面向对象三大特性(基础篇)

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 [https://github.com/h2pl/Java-Tutorial](https: ...

  2. Java基础1:深入理解Java面向对象三大特性

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  3. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  4. java面向对象三大特性之继承

    通过重用已经测试并验证通过的代码,怎样才减少开发工作,所有开发团队都在为一问题而努力.一个久经考验的方法是通过有效地使用Java继承优化应用程序开发. 继承的从某种意义上讲,继承的短暂美就如同宇宙中所 ...

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

    一.封装 封装也称信息隐藏,是指利用抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数据细节,只保留一些接口使其与外界发生联系.也就是说用户 ...

  6. Java面向对象三大特性

    封装.继承.多态. 1.封装 封装就是将对象的属性和行为特征包装到一个程序单元(即类)中,把实现细节隐藏起来,通过公用的方法来展现类对外提供的功能,提高了类的内聚性,降低了对象之间的耦合性. 2.继承 ...

  7. JAVA基础——面向对象三大特性:封装、继承、多态

    JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. ...

  8. java提高篇(四)-----理解java的三大特性之多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  9. 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍

    面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...

随机推荐

  1. [20191003]oracle number类型存储转化脚本.txt

    [20191003]oracle number类型存储转化脚本.txt --//完善脚本,增加支持科学记数法.比如1e4之类的写法. 2.测试:$ cat test.txt012251234100-4 ...

  2. MySQL通过SHOW TABLE STATUS查看库中所有表的具体信息

    有时候我们想看下指定库下所有表的使用情况,比如,查询表的Table大小,什么时候创建的,数据最近被更新的时间(即最近一笔insert/update/delete的时间).这些信息对我们进行库表维护很有 ...

  3. 获取SpringCloud gateway响应的response的值,记录踩坑

    最近在做网关改造,想要通过Gateway过滤器获取ResponseBody的值,查看了网上的帖子和官网内容: 帖子:https://cloud.tencent.com/developer/articl ...

  4. 有 va_arg宏 中数组下标-1 引发的思考 - C 语言中内存模型

    va_arg宏,是头文件 stdarg.h 中定义的,获取可变参数的当前参数. #define va_arg(list, mode) ((mode*)(list+=sizeof(mode)))[-1] ...

  5. Linux—文件上传和下载

    一.通过SecureCRT的rz.sz实现文件的上传和下载 1.检查是否安装sz  rz,命令如下 [root@localhost ~]# rpm -qa | grep rz # 上传 [root@l ...

  6. Windows 10系统迁移

    快速复制硬盘可以调整目标盘分区大小(适用于不同容量的硬盘克隆) 调整完目标盘的系统分区大小后将恢复分区拖到系统分区后面对齐,恢复分区后面既可留出未分配容量用作Linux系统安装. 克隆完成后对uefi ...

  7. Vue中的父组件给子组件传值

    父子组件传值: 父组件在调用子组件的地方,添加一个自定义的属性,属性的值就是你要传递给子组件的数据,如果值是一个变量,那么需要使用到绑定属性: 在子组件定义的地方,添加一个props选项,值为一个数组 ...

  8. UVA10559 方块消除 Blocks(区间dp)

    一道区间dp好题,在GZY的ppt里,同时在洛谷题解里看见了Itst orz. 题目大意 有n个带有颜色的方块,没消除一段长度为 \(x\) 的连续的相同颜色的方块可以得到 \(x^2\) 的分数,用 ...

  9. 历届试题 青蛙跳杯子-(bfs)

    题目:http://lx.lanqiao.cn/problem.page?gpid=T448 题意:有两个字符串例如*WWBB和WWBB*,*每次能往左或右跳1-3步,与原位置的字符交换,问最少步数跳 ...

  10. 怎样把ndarray转换为PyQt中的QPixmap

    找不到文档,只在网上找到一些语焉不详,执行错误的代码,鼓捣了一个晚上,研(luan)究(gao)成功 def img2pixmap(self, image): Y, X = image.shape[: ...