封装


在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

封装的优点

  • 1. 良好的封装能够减少耦合。

  • 2. 类内部的结构可以自由修改。

  • 3. 可以对成员变量进行更精确的控制。

  • 4. 隐藏信息,实现细节。

实现Java封装的步骤

1. 修改属性的可见性来限制对属性的访问(一般限制为private),例如:

public class Person {
private String name;
private int age;
}

这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。

2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:

public class Person{
private String name;
private int age;

public int getAge(){
return age;
}

public String getName(){
return name;
}

public void setAge(int age){
this.age = age;
}

public void setName(String name){
this.name = name;
}
}

Lombok简化封装的注解依赖

https://www.cnblogs.com/heyonggang/p/8638374.html

官网地址

https://projectlombok.org/

为什么需要封装?

- 当属性可以被随意访问时,属性的数据限制只能基于规定的数据类型的数值范围所限制,除此之外没有别的限制了

- 实际开发中,我们需要对属性的赋值增加额外的限制条件,具体的限制视情况而定

- 这个限制就可以阻碍属性的直接访问,我们通过方法这个途径来对属性访问和限制

- 避免直接访问属性,所以设置对属性的私有化权限 private

JavaBean?

- 概念: 是一个可重用组件 Component

- 本质就是一个普通的类

- 这个类必须public修饰

- 必须提供无参构造

- 属性必须是private且提供对应的setter & getter 方法

- 作用于映射数据库中的表,建立实体关系

- 或者映射表单,接受数据

this关键字

https://www.cnblogs.com/zheting/p/7751752.html

- this 指代当前对象的引用

- 表示任意一个本类创建出来的实例

- 因为表示当前对象,所以能够访问成员方法,和成员变量,或者构造器

- 如果要调用本类的方法或者属性,其实可以不用书写this.编译器默许这样的写法了

- 但是参数和属性同名就像setter一样,或者是带参构造,要赋值给属性就必须声明this,表示是成员方法

对象数组的操作使用

https://blog.csdn.net/lxxiang1/article/details/82320720

Import & Package

https://www.cnblogs.com/colintz/p/10088166.html

- import 导入指定包下的资源 类 抽象类、枚举类、接口

- java.lang包下的资源默认导入,及不会显示,也不会报错

- 调用同类名资源使用时,建议书写完整类名,也就是类的完全限定名

- 通配符* 表示所有,使用*即表示导入所有资源

静态导入

https://www.cnblogs.com/EasonJim/p/7907660.html


继承 Inheritic

https://blog.csdn.net/wei_zhi/article/details/52780026

- Java是单继承,多实现的 一个类只能继承一个类,但是可以实现多个接口

- Java允许继承链

- 只能继承一个类,但可以被多个类继承

- 继承,可以提高代码复用, 但是也增加了耦合性 减少代码冗余

- 必须符合 is a 的关系

- 是多态实现的前提条件

- 增强对象功能,扩展功能

- class A extends B

- A 继承 B, A是派生类 子类 subclass

- B 是 A 的 父类、超类、基类、superclass

- 父子类是相对的概念

- 直接继承的类叫做直接父类

- 继承链上的父类是间接父类

- 子类继承父类后,拥有protected以上级别的属性和方法

- Java并不是真正意义上的单继承,实际上,所有的类,包括我们自己创建的类,都有一个顶级类Object 直接或者间接的

- 所有的类都具有Object的方法和属性

基类,顶级类,Object:

https://blog.csdn.net/qq_35029061/article/details/100220554

重写Override

https://blog.csdn.net/digua930126/article/details/90760387

- 重写,也称为覆盖 子类继承父类之后,子类中对父类同名同参数的方法进行覆写

- 创建子类实例,调用父类同名方法时,实际是执行子类重写父类的方法

- 重写必须同名同参数

- 可以注解为@Override 以标识

- 子类重写的方法的权限访问必须大于等于父类方法,可见性必须扩大

- static必须一一对应,父类static子类也必须static

重载与重写的区别

https://blog.csdn.net/qunqunstyle99/article/details/81007712

super关键字:

https://blog.csdn.net/sujudz/article/details/8034770

- 表示为父类的

- 调用 父类的属性、方法、构造器

- 在子类中定义了同名属性时,要调用父类属性,必须显示声明super 表示为父类属性

- 子类重写了父类方法,如果希望调用父类的方法,使用super.方法


什么是多态?

- 一个事物具有多种形态

- 对象的多态:子类实例被父类引用指向

多态:

https://blog.csdn.net/doncoder/article/details/83243906

编译器,只能调用父类声明的方法,实际运行期,执行的是子类重写父类方法

实现多态必须具有继承关系,或者是接口的实现,其次是方法的重写

上下转型

内存实际上是加载了子类特有的属性和方法,但是变量是父类类型引用,编译时只能调用父类的方法

如何调用子类自己的方法? 向下转型,强制转换

- 转型导致的异常即是类型不正确 ClassCastException

https://blog.csdn.net/yuncaidaishu/article/details/88690799

Instanceof的使用

- 实例 instance 实例所属的类

- 返回类型 布尔值 true false

- 表示判断此对象是否是这个类创建的实例

- JDK14 种 强化了 instanceof 的语法,当判断为true 时可直接强制接受对象

【Java】封装、继承、多态的更多相关文章

  1. Java 封装 继承 多态

    Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. JAVA EE,JAVA SE,JAVA ME,JDK,JRE,JVM之间的区别

    JAVA EE是开发企业级应用,主要针对web开发有一套解决方案. JAVA SE是针对普通的桌面开发和小应用开发. JAVA ME是针对嵌入式设备开发,如手机. JRE是程序的运行环境 JDK是程序 ...

  2. 使用new Image()可以针对单单请求,不要返回数据的情况

    使用new Image()可以针对单单请求,不要返回数据的情况,比如我这里写了一个Demo,请求百度的Logo一个示例: <html> <head> </head> ...

  3. iframe框架及优缺点

    iframe框架及优缺点 HTML5不再支持使用frame,关于frame与iframe的区别,可以参阅 iframe与frame的区别 基本使用 src:规定在iframe中显示的文档的URL. f ...

  4. 记录一次线上bug

    记录一次线上bug,总的来说就是弱网和重复点击.特殊值校验的问题. 测试场景一:        在3g网络或者使页面加载速度需要两秒左右的时候,输入学号,提交学生的缴费项目,提交完一个 学生的缴费后, ...

  5. navicat使用、pymysql连接数据库

    内容回顾 select distinct 字段1,字段2,... from 表名 where 分组之前的过滤条件 group by 分组条件 having 分组之后过滤条件 order by 排序字段 ...

  6. bugku论剑场web解题记录

    前言 国庆这几天感觉没什么好玩的地方,家又离的太远,弱鸡的我便决定刷刷题涨涨知识,于是就有了这篇文章.. 正文 写的不对的地方欢迎指正 web26 打开直接就是代码,这应该就是一道代码审计的题了 这里 ...

  7. tpyboard v202 测试tcp通讯,i2c的oled程序,呼吸灯源码,希望对大家有所帮助

    1.下载到板子里的main.py代码如果需要驱动oled的,可以参考我上面那篇文章import time, mathimport machineimport network# from ssd1306 ...

  8. python 产生随机数,随机字符串

    import randomimport string#随机整数:print random.randint(1,50)#随机选取0到100间的偶数:print random.randrange(0, 1 ...

  9. OpenCV-Python 理解SVM | 五十五

    目标 在这一章中 我们将对SVM有一个直观的了解 理论 线性可分数据 考虑下面的图像,它具有两种数据类型,红色和蓝色.在kNN中,对于测试数据,我们用来测量其与所有训练样本的距离,并以最小的距离作为样 ...

  10. python实现十大经典排序算法

    Python实现十大经典排序算法 代码最后面会给出完整版,或者可以从我的Githubfork,想看动图的同学可以去这里看看: 小结: 运行方式,将最后面的代码copy出去,直接python sort. ...