封装


在面向对象程式设计方法中,封装(英语: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. CentOS7安装和配置ftp服务

    目录 一.ftp简介 二.安装ftp软件包 1.安装ftp服务器 2.安装ftp客户端 三.配置ftp服务器 1.关闭SELINUX 2.配置ftp数据端口参数 3.开通防火墙 4.启动vsftpd服 ...

  2. node 模块载入原理【1】

    简单介绍 我们会从简单的模块载入原理来开始,尝试阅读下 Node.js 源代码.首先我们知道 Node.js 的源代码主要是由 C++ 和 JavaScript 编写的,JS 部分主要在 lib 目录 ...

  3. Python——迭代器的几个高级用法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第8篇文章. 今天我们依然介绍的是迭代器,不过介绍的是几个比较常用的高级用法,在实际场景当中非常实用,可以帮助我们大 ...

  4. mysql系列--sql实现原理

    count(*) MyISAM 引擎把⼀个表的总⾏数存在了磁盘上,因此执⾏ count(*) 的时候会直接返回这个数,效率很⾼:但是加了条件则不能快速返回⽽ InnoDB 引擎就麻烦了,它执⾏ cou ...

  5. PHP7内核(六):变量之zval

    记得网上流传甚广的段子"PHP是世界上最好的语言",暂且不去讨论是否言过其实,但至少PHP确实有独特优势的,比如它的弱类型,即只需要$符号即可声明变量,使得PHP入手门槛极低,成为 ...

  6. Springmvc与Struts区别?

    在一个技术群里看到机器人解释的二者区别,在此Mark下. 一.框架机制 spring mvc 和 struts2的加载机制不同:spring mvc的入口是servlet,而struts2是filte ...

  7. 《java编程思想》一切都是对象

    1. 用引用操纵对象 在Java中一切皆对象,我们平常在对java中的类进行操作时,其实操作的不是对象本身而是对象的引用.我们可以将这想象成用遥控器(引用)操作电视机(对象),只要握住这个遥控器,就能 ...

  8. [vijos1554&bzoj1411]硬币游戏<快速幂>

    题目链接:https://vijos.org/p/1554 http://www.lydsy.com/JudgeOnline/problem.php?id=1411 这题真的淫*QAQ... 一看题还 ...

  9. 读者来信 | 刚搭完HBase集群,Phoenix一启动,HBase就全崩了,是什么原因?(已解决)

    前言:之前有朋友加好友与我探讨一些问题,我觉得这些问题倒挺有价值的:于是就想在本公众号开设一个问答专栏,方便技术交流与分享,专栏名就定为:<读者来信>.如遇到本人能力有限难以解决的问题,我 ...

  10. linux压缩及归档

    一.解析 压缩:把大文件,通过压缩成一个比之前小的文件. 归档(打包):把多个文件,归档成一个文件. 二.压缩 1.zip(归档压缩,可以压缩目录,要保存源文件) 压缩:zip  压缩后的文件名 压缩 ...