更好的阅读体验: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 继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法 ...

  2. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

  3. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  4. Java基础——面向对象(封装——继承——多态 )

    对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...

  5. 浅谈学习C++时用到的【封装继承多态】三个概念

    封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...

  6. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

  7. php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

    1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...

  8. Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

    Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ​ 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...

  9. OOP三大核心封装继承多态

    OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...

  10. python面向对象(封装,继承,多态)

    python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...

随机推荐

  1. 基于java+springboot的家教预约网站、家教信息管理系统

    该系统是基于java+springboot开发的家教预约网站.是给师妹开发的实习作品.学习过程中,遇到问题可以在github咨询作者. 演示地址 前台地址: http://jiajiao.gitapp ...

  2. 如果诸葛亮会编程,用Java写出师表...

    继上一篇 "如果诸葛亮用C#写出师表..."后,站长想自己的第一语言是Java,虽然平时工作上用的不多,也用Java实现一遍吧,改改就是了,无非就是: C#的Console.Wri ...

  3. SD协议-时序02

    SD Bus PAD internal card clock - 对于SD card来讲,时钟信号是一个输入 Data0-3 - inout类型,既可能是输入,又可能是输出 对于Data0-3输出的时 ...

  4. 275.H指数II

    1.题目介绍 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数,citations 已经按照 升序排列 .计算并返回该研究者的 h 指数. ...

  5. Laravel : 模糊查询 where orWhere

    Banner::where('title', 'like', "%{$keyword}%")->orWhere('introduce', 'like', "%{$k ...

  6. Android——共享参数SharedPreferences

    4数据存储 共享参数SharedPreferences.数据库SQLite.SD卡文件.App的全局内存 4.1共享参数SharedPreferences SharedPreferences是一个轻量 ...

  7. [转帖]一文说清 Linux System Load

    https://zhuanlan.zhihu.com/p/447661302 双十一压测过程中,常见的问题之一就是load 飙高,通常这个时候业务上都有受影响,比如服务rt飙高,比如机器无法登录,比如 ...

  8. [转帖]为什么不推荐使用/etc/fstab

    https://www.jianshu.com/p/af49a5d0553f 对于工作中使用服务器的公司来讲,每到节假日来临时,总免不了对服务器进行下电.而收假回来的早上,则会有一个早上的时间会花费在 ...

  9. [转帖]/etc/profile和/etc/environment的区别

    时间  2019-11-07 标签 profile environment 区别 繁體版 原文   https://my.oschina.net/u/2885925/blog/2989579 /etc ...

  10. [转帖]Native Memory Tracking 详解(3):追踪区域分析(二)

    https://www.modb.pro/db/539804 上篇文章 Native Memory Tracking 详解(2):追踪区域分析(一) 中,分享了NMT追踪区域的部分内存类型--Java ...