面向对象---封装

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

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

优点:

  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. Docker 镜像文件的导入和导出

    使用save命令 保存镜像 docker save -o name_by_you.tar exist_images 将文件copy到另一台机器 使用load命令将镜像文件保存到本地仓库 docker ...

  2. java与MySQL数据库的连接

    java与MySQL数据库的连接 1.数据库的安装和建立参见上一篇博客中的第1,2步骤.(http://blog.csdn.net/nuptboyzhb/article/details/8043091 ...

  3. dataset的reparation和coalesce

    /** * Returns a new Dataset that has exactly `numPartitions` partitions, when the fewer partitions * ...

  4. 第一个Vue.js案例

    第一个Vue.js案例 使用Vue有如下几步 引入文件头 加入数据输出框 创建Vue对象,定义数据 案例: <!DOCTYPE html> <html lang="en&q ...

  5. 关于Tomcat部署项目的点点滴滴

    在给客户部署环境时,我们不可能想开发一样,在编辑软件部署一下tomcat就可以正常运行.我们也应该清楚java的运行机制**“先编译,后解释”**的原则.(如下图)![图片描述][1]那么在Tomca ...

  6. JuJu团队12月27号工作汇报

    JuJu团队12月27号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 飞飞 完成data processing 待安排 无 婷婷 调试代码 提升acc 无 恩升 修正eval ...

  7. Redar Chart_Study

    1.Select a theme 2.Experiment with visual customization 3.Edit groups and categories 4.Creat a scrip ...

  8. HiBench成长笔记——(5) HiBench-Spark-SQL-Scan源码分析

    run.sh #!/bin/bash # Licensed to the Apache Software Foundation (ASF) under one or more # contributo ...

  9. nginx配置多个项目

    使用Nginx要在同一个域名下配置多个项目有两种方式: nginx按不同的目录分发给不同的项目 启用二级域名,不同的项目分配不同的二级域名 1.nginx按不同的目录分发给不同的项目: server ...

  10. ubuntu18.04下载yarn

    下载curl sudo apt-get update && sudo apt-get install curl 配置库 curl -sS https://dl.yarnpkg.com/ ...