面向对象---封装

封装是面向对象思想的三大特征之一。

理解: 隐藏对象的属性和实现细节,仅对外提供公共访问方式。

优点:

  1. 将变化隔离
  2. 便于使用
  3. 提升代码复用性
  4. 提高安全性

封装原则:

  1. 将不需要对外提供的内容都隐藏(通过修饰符private隐藏)起来
  2. 把属性都隐藏,提供公共方法对其访问

权限修饰符:

  1. 意义:在Java中可以使用访问控制符来保护对类、变量、方法和构造方法的访问。
  2. 可以通过下表来说明访问权限:
修饰符 当前类 同一包内 子孙类(同一包) 子孙类(不同包) 其他包
public Y Y Y Y Y
protected Y Y Y Y/N(需具体说明) N
default Y Y Y N N
private Y N N N N
  1. 对于私有的属性,提供公共方法对其访问。

    例如:
class Student {
private int age;
private String name;
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class StudentDemo {
public static void main(String[] args) {
Student s = new Student();
s.setAge(19);
s.setName("lyx");
System.out.println(s.getAge());
System.out.println(s.getName());
}
}
运行结果为:19
lyx

在以上的代码中我们对Student类中的age和name变量进行私有(即将age和name封装在Student类中),在类的外部无法直接对它们进行访问(修改和读取)。但我们在Student类中分别定义公共方法set和get,我们就可以实现对它们的访问了。

私有只是封装的一种表示形式。

之所以对外提供公共方法对其访问,是因为可以在访问方式中加入逻辑判断语句。

对访问的数据进行操作,提高代码的健壮性。

在上述的例子中,我们通过setAge方法对age进行修改,但是age的值需要设定为一个合理的数值,如果对age的值不加检查地就设定可能会导致一些错误。比如age的合理值为[0,100],我们就可以将setAge这个方法的代码改为以下:

public void setAge(int age) {
if(0<=age && age<=100)
this.age = age;
else
System.out.println("age非法");
}

在进行如上修改之后,如果age的值不合法,就会有所提示。

参考资料:https://www.runoob.com/java/java-modifier-types.html#protected-desc

Java学习笔记(一) 面向对象---封装的更多相关文章

  1. Java学习笔记之---面向对象

    Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...

  2. Java学习笔记之面向对象、static关键字

    一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...

  3. Java 学习笔记(4)——面向对象

    现在一般的语言都支持面向对象,而java更是将其做到很过分的地步,java是强制使用面向对象的写法,简单的写一个Hello Word都必须使用面向对象,这也是当初我很反感它的一点,当然现在也是很不喜欢 ...

  4. 疯狂java学习笔记之面向对象(五) - 封装、继承、多态

    一.封装: 封装的概念: - 合理的隐藏:隐藏不想被外界操作的Field.方法.构造器 - 合理的暴露:一般就是希望给别人调用的方法 e.g:显示器(按键暴露出来操作,但实际的东西/细节方法被隐藏起来 ...

  5. Java学习笔记--关于面向对象的思考

    1.不可改变的类生成对象以及变量的范围 2. 关键词this的使用 3.用类抽象的思想制作软件 4.通过关系模型建立类 5.使用面向对象的范例来设计程序,遵循类设计指导. 已经学习了:怎么定义类已经创 ...

  6. 【原】Java学习笔记019 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 仔细想一想,Ani ...

  7. 【原】Java学习笔记016 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // this 关键字 ...

  8. Java学习笔记(面向对象上)

    面向对象(上) 面向对象的特点:封装性(是面向对象的核心思想,将对象的属性和行为封装起来).继承性(主要描述类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展)和多态 ...

  9. Java学习笔记:03面向对象-接口_多态

    1.类的概念 一堆具有共同的成员变量(属性)和成员方法(功能)对象的集合 2.接口的概念 接口是功能的集合,就是方法的集合 接口中只能定义方法,不能定义普通的成员变量 而且接口中的成员方法,必须是抽象 ...

随机推荐

  1. WebRobot1.8.2网站多功能网络安全渗透检测工具

    新版介绍 最新版的Webrobot使用的是插件模式,插件存放在主程序目录下的plugin文件夹里,所有插件的配置文件及字典等其他文件也存放在这个文件夹内.我们需要用到哪个插件,只需要双击它便可打开,需 ...

  2. Lesson 47 The great escape

    What is one of the features of modern camping where nationality is concerned? Economy is one powerfu ...

  3. 【C#】关于左移/右移运算符的使用

    吐槽先~为什么我的老师大学时候没教过我这东西  - -. 继续送栗子: 比如 “(1+2)<<3” 你们猜等于几~ Debug.Log((1+2)<<3)之后输出的是“24”. ...

  4. 攻防世界web新手练习区(2)

    弱认证:http://111.198.29.45:43769/ 打开是这个页面: 用户名输入1,密码输入2,试试看.会提示你用户名为admin.接下来用burp对密码进行爆破,发现弱口令0123456 ...

  5. ls查看所有文件

    ls -al   查看所有文件,包括隐藏文件

  6. Linux:Shell-Bash基本功能

    1.历史命令 history [选项] [历史命令保存文件] 选项:-c  清空历史命令 -w 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history 历史命令默认保存1000条,可以 ...

  7. 对S7通信的连接的理解以及对比CAN通信协议来理解PLC通讯

    对S7通信的连接的理解以及对比CAN通信协议来理解PLC通讯. 对功能块 SFB12 和 SFB13 的R_ID参数的理解 ? 对于同一个数据包.发送方与接收方的R_ID应该相同. 用下图解释 双向连 ...

  8. Windows下使用nginx问题

    1.下载完成后,解压缩,运行cmd,使用命令进行操作,不要直接双击nginx.exe,不要直接双击nginx.exe,不要直接双击nginx.exe 一定要在dos窗口启动,不要直接双击nginx.e ...

  9. POJ - 1061 青蛙的约会 (扩展欧几里得求同余式)

    题意:两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对 ...

  10. Vue - 定义使用组件

    import Card from './components/Card.vue' Vue.component('m-card',Card)   // component是注册全局组件,在实例化VUE前 ...