更好的阅读体验:Java 封装、继承、多态的理解

1.封装

封装:就是隐藏对象的属性和实现细节,仅对外提供公共访问方式。让使用者知道的才暴露出来,不需要让使用者知道的全部隐藏起来

封装的好处:避免使用者直接操作属性值,隐藏类的实现细节;让使用者只能通过程序员规定的方法来访问数据;可以方便的加入存取控制语句,限制不合理操作,提高程序安全性。

1.1.封装的实现

Java是使用“访问控制符”来控制哪些细节需要封装的,哪些细节需要暴露的。

Java中有4种访问控制符,分别为private,default,protected,public。它们说明了面向对象的封装性,所以我们编写代码的时候,尽可以让访问权限降到最低,从而提高安全性。

访问修饰符作用范围

private

被private修饰的属性和方法,只能在所在类内部访问,不能被其他类访问,子类不能继承也不能访问。

default(缺省)

变量或者方法前没有访问修饰符时,可以被所在类访问,可以被同一包内的其他类访问或者继承。但是不能被其他包访问。

protected

被protected修饰的方法和属性,在同一包内可被访问和继承。不同包内,子类可继承,非子类不能访问。

public

方法和属性前有public修饰,可以被任意包内的类访问。

另外,类要想被其他包导入,必须声明为public。被public修饰的类,类名必须与文件名相同。

2.继承

继承是类与类之间的关系,与现实世界中的继承(例如孩子继承父母基因)类似。

继承可以理解为一个类从另一个类获取方法和属性的过程。

例如:类B继承于类A,那么B就拥有A的部分方法和属性(private修饰或不在同一个包default修饰的无法访问)。

2.1.继承的实现

通过使用关键字 extends 来实现继承。

方法重写(Override)

有继承才有重写,重写就是将父类的方法重新写一遍--重新实现为需要的功能。

只有能继承的方法才可以重写,重写时只能改花括号“{}”里面的内容。

重写的意义是:不同的子类有着差异化的功能实现,是父子类之间的多态性的一种表现。

方法重载(Overload)

重载指的是在同一个类中存在多个具有不同参数个数或者类型的同名方法。

所有方法都可以重载,包括构造方法。

重载的意义是:让类以统一的方式处理不同类型数据的一种手段,是一个类中多态性的一种表现。

2.2.继承的优缺点

优点

  1. 多态特性,父类引用可以指向多个子类实例对象
  2. 相互关联,共享特性

缺点

  1. 父类变,子类就必须变
  2. 继承破坏了封装,对于父类而言,它的实现细节对与子类来说都是透明的
  3. 继承是一种强耦合关系
  4. Java中是单继承,子类只能有一个爸爸,和真实的世界一样你就一个爸爸

如果只是共享特性,那可以使用组合来解决继承(在子类中new 父类,把父类当作是子类的属性来使用)-- 强耦合不具备多态特性

3.多态

多态是同一个行为具有多个不同表现形式或形态的能力。

3.1.多态分类和实现

  • 编译时多态(静态多态):方法重载实现的多态

  • 运行时多态(动态多态):类继承/接口实现 + 重写 + 向上转型实现的多态

    基于继承/接口来实现的多态:面向接口的方式编程为的就是可以使用多态的特性让编程变得更加灵活。

3.2.多态的优点

消除类型之间的耦合关系

  1. 可替换性
  2. 可扩充性
  3. 接口性
  4. 灵活性
  5. 简化性

3.3.向上转型

将一个父类的引用指向一个子类的对象,称为向上转型。向上转型是自动完成的。

向上转型后,通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法。但通过父类引用变量无法调用子类特有的方法。

例如:可是使用以下多种引用来指向该对象。

不同的对象指向相同的引用:虽然都是list集合,但有着不同的实现。

查看一下 List、ArrayList和LinkedList 等依赖关系:ArrayList 和 LinkedList 直接和间接都实现了List 接口。

3.4.向下转型

将子类引用指向父类的对象,称为向下转型。向下转型是强制完成的。

向上转型无法使用子类特有的方法,如果非要使用这些特有方法,那么又得向下转型,再使用子类的特有方法。

例如:将List 对象强制转换为ArrayList,需要使用"(ArrayList)"来完成强转。

Java 封装、继承、多态的理解相关推荐

  1. java封装继承多态的理解_深入理解Java封装、继承、多态

    一:封装 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问,常见的实现方式就是:getter.setter. 封装遵循了"开闭原则&qu ...

  2. java封装继承多态的理解_用最傻瓜式的方法理解Java中的封装、继承和多态

    说到java中面向对象的封装.继承和多态,很多人会说这么简单这么入门的东西一直讲干嘛,虽然是基础,但是我们要明白,所有东西都是要在基础上发展的,没有基础就去学其他的,那么你肯定是很容易失败的,那么应该 ...

  3. java封装 继承 多态_Java 封装、继承、多态

    Java 封装.继承.多态 1.封装: 封装的理解: 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,并通过该类提供的方法来实现对隐藏信息的操作和访问.(简单的说就是隐藏对象的信息,留出访问的接 ...

  4. 细品java封装继承多态

    目录: 1.封装 2.继承 3.多态 1.封装 封装的作用:封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没 ...

  5. JAVA封装|继承|多态

    一,继承:面向对象的三大继承之一 子类 | 派生类 : 继承父类的类 定义子类独有的内容 父类 | 超类 | 基类 : 被子类继承的类 所有子类的共性 1,Q&A 1.为什么要使用继承 ? 为 ...

  6. java封装继承多态语法,GO语言中封装,继承,和多态

    ##封装 go中的封装和java的不太一样,在go里面是没有java中的class,不过可以把struct看成一个类,封装可以简单地看作对struct的封装,如下 type obj1 struct { ...

  7. Java——封装继承多态

    封装 将方法和属性封装到一个对象中,对外提供方法用于改变该对象的属性值. public class Person { private String name; private Integer age; ...

  8. Java封装继承多态练习题

    题目描述 某公司的雇员分为以下若干类: Employee:这是所有员工总的父类, 属性:员工的姓名,员工的生日月份. 方法:getSalary(intmonth) 根据参数月份来确定工资,如果该月员工 ...

  9. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态

    Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...

  10. 大数据笔记8—java基础篇4(面向对象-封装-继承-多态)

    面向对象 一.面向对象 1.面向过程 1.2.举例 1.3.总结 二.面向对象 1.简述 2.举例 3.思想特点 2.1.类的定义格式 2.1.1.简述 2.2.2.格式 2.3.3.示例 三.类的使 ...

最新文章

  1. Hibernate源码阅读2——Service Registry
  2. using namspace std的使用
  3. 添加触发器后自增ID会变
  4. 说说计算机发展史在你的印象里都有哪些内容,鱼池宣讲 | 专题采访 第二期 | 过去的一年里,你印象深刻的事情有哪些?...
  5. Hadoop/Spark相关面试问题总结
  6. LiveVideoStack线上分享第五季(十二):移动端多种通话场景统一技术方案实践...
  7. 把checkbox复选框转换成单选按钮radio
  8. phpstudy mysql5.1_linux下mysql5.1 和 5.7安装教程详解
  9. Windows Store App 获取文件及文件夹列表
  10. “智企云中享“,首届SAP中国云大会召开
  11. 怎么修改某一软件的服务器,怎样设置一个软件服务器地址
  12. 兼容firstChild和firstElementChild
  13. 网上书店软件测试,网上书店测试用例.doc
  14. 如何删除ie浏览器缓存文件、缓存js
  15. 音乐资源免费_3个免费的音乐研究在线资源
  16. 优酷视频APP的缓存视频在哪里
  17. 从DS1302电路设计总结的晶振电路设计规范
  18. 数字城市地理信息公共平台软件测评大纲
  19. 实战引流技巧,教你如何做好运营
  20. 王道书P41 T21(单链表实现)

热门文章

  1. LiveReload for mac 软件下载
  2. 快速开发:普元EOS平台简介
  3. p5.js 入门教程
  4. syscall 系统调用陷入_MIPS中的异常处理和系统调用【转】-阿里云开发者社区
  5. Kafka 面试题(2022)
  6. pytorch(11)-- crnn 车牌端到端识别
  7. 360服务器linux版,360浏览器Linux版
  8. 手机管家中的黑名单功能
  9. matlab 三对角矩阵 追赶法,追赶法求解三对角方程及其算例.doc
  10. 学霸如何使用计算机,学霸必备软件!超强的灵格斯词霸怎么用?