面向对象(Object Oriented Programming)三大特性

1.封装(Encapsulation)
2.继承(Inheritance)
3.多态(Polymorphism)

定义

Encapsulation in Java is a mechanism of wrapping the data (variables) and code acting on the data (methods) together as a single unit. In encapsulation, the variables of a class will be hidden from other classes, and can be accessed only through the methods of their current class.
Java中的封装是一种将数据(变量)和作用于数据(方法)的代码打包为一个单元的机制。在封装中,类的变量将对其他类隐藏,并且只能通过当前类的方法访问。[^1]

封装在生活中的例子

例如,将你的卧室看作一个对象,卧室内部的装饰物,家具等本应都是卧室的私有属性,但是如果没有墙壁的遮挡,别人就会对屋里的任何东西一清二楚,甚至你在卧室里的一举一动都会被别人看到。正是因为这堵墙的存在,卧室的装饰品,家具等才不被外界所看到,我们甚至在卧室任意更改家具位置,改变装修风格也不会影响到其他人。但是没有门,这个被包裹的严严实实的黑盒子又有什么用呢,卧室的门就是通往外界的主要途径。

封装在Java中的普遍形式

Class Person{private String name;private int age;private float weight;public String getName(){return name;}
public void setName(String name){this.name=name;           //this.name指成员变量private String name}                          //等号右侧name表示传入的name,this在此为了区分两个name
public int getAge(){return age;}
public void setAge(int age){this.age=age;}
public float getWeight(){return weight;}
public void setWeight(float weight){this.weight=weight;}public class Test{public static void main(String[] args){Person p1 = new Person();p1.setName("小王");                            //设置姓名p1.setAge(18);                               //设置年龄p1.setWeight(60);                             //设置体重System.out.println(p1.getName());             //获取姓名System.out.println(p1.getAge());              //获取年龄System.out.println(p1.getWeight());           //获取体重}
}

由上图代码可以体现,封装在Java中的普遍应用形式,为三个属性(name,age,weight)分别写了get和set方法,其中可以通过get方法获取属性的值,通过set方法设置属性。


通俗说来,get和set就如同卧室的墙壁,三个属性(name,age,weight)就是卧室里的装修,家具等,通过get,set墙壁的遮挡,使得外界无法看到卧室里的东西,也无法改变,只能通过set来改变属性,get来获取属性。


外界:指其他class
卧室:指该class


封装的优点

问题:如果我们把age设置为200或者负数,虽然不会报错,但是不符合实际要求,这个问题就可以使用封装合理的解决。

Class Person{private String name;private int age;public String getName(){return name;}
public void setName(String name){this.name=name;}
public int getAge(){return age;}
public void setAge(int age){if(age <= 0  || age >130){System.out.println("This is a wrong age! default: 18)this.age=18;}else{this.age=age;}}
}public class Test{public static void main(String[] args){Person p1 = new Person();p1.setName("小王");                            //设置姓名p1.setAge(-10);                                  //设置年龄System.out.println(p1.getName());             //获取姓名System.out.println(p1.getAge());              //获取年龄}
}

Console:

小王
This is a wrong age! default: 18
18

我们在age中加入了对年龄的判断,这样就有效的避免了不符合实际情况的发生。

由此可以看出,封装可以对类的内部进行改变而不影响整体结构,同时也保护来数据。对于外界而言,它的内部是隐藏的,暴露给外界的只是可以访问它的方法。

优点

1.类内部可以自由修改
2.可以对成员变量更准确的控制
3.隐藏信息,保护数据
4.降低耦合度


耦合度:耦合性是编程中的一个判断代码模块构成质量的属性,不影响已有功能,但影响未来拓展,与之对应的是内聚性

例如:卧室的窗户与墙壁,如果窗子是扣死在墙里的 ,那么修改窗子时,就必须修改墙,这就比较紧密了,但是如果你窗子是按照某种规格的 可以自由拆装的 那么修改的代价就小,耦合度也就低了
在程序中我们要求 高内聚,低耦合!

get和set在eclipse中的简单用法


鼠标右键->Source->Generate Getters and Setters->选择需要用getset的属性->generate


更多精彩尽在主页?


reference:
1.https://www.tutorialspoint.com/java/java_encapsulation.htm

Java——OOP三大特性之封装性(Encapsulation)通俗详细相关推荐

  1. java的封装性的优点_18、Java的三大特性之封装

    Java的三大特性 java是一个面向对象的语言,所以java也有面向对象语言的三大特性:继承,封装,多态,任何一个java项目,都会用到这三种特性,所以掌握好这三大特性非常的重要. 封装 我们为什么 ...

  2. 【总结记录】面向对象设计OOP三大特性(封装、继承、多态)、七大基本原则的理解(结合代码、现实实例理解)

    文章目录 一. 三大特征的理解 (1)封装 (2)继承 (3)多态 (4)面向对象.面向过程的对比 二. 七大基本原则的理解 (1)单一职责原则 (2)开放封闭原则(OOP 核心) (3)里氏替换原则 ...

  3. Java的三大特性之封装、继承、多态-----最简理解

    根据网上其他地方的解释,以及查找资料,将自己对java三大特性的理解展示如下. 封装:(属性私有,set/get,在set中限定一些不安全的情况) 封装是指把一个对象的状态信息(也就是属性)隐藏在对象 ...

  4. java基础----(三大特性:封装,继承,多态)

    封装 将对象的转态信息隐藏在对象内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对内部信息的访问和操作. 封装的好处: 隐藏类的实现细节 使用者只能通过事先预定的方法来访问数据,从而可以在该 ...

  5. php面向对象三大特性,PHP面向对象的三大特性之一封装性

    /*封装性: 面向对象的三大特性之一 *就是把对象的成员(属性,方法)结合成一个独立的相同单位,并尽可能隐藏对象的内部细节 *public protected *private 私有的, 用这个关键字 ...

  6. java的三大特性,封装,继承,多态

    封装 Java代码   /** * 所谓封装,就是将对象具有的成员变量和成员函数包装和隐藏起来,让外界无法直接使用, * 被封装的成员只能通过某些特定的方式才能访问. * 实现封装有两个步骤: *   ...

  7. Java的三大特性:封装、继承、多态

    一.类的概念: 类一般包括两个部分:属性(成员变量)和方法(成员方法) 方法组成部分:修饰符(可选) 返回值类型(必须) 方法名(必须)参数列表(可选) package com.classTest.p ...

  8. 面向对象三大特性一一封装(encapsulation)

    为什么要封装? 我们看电视,只要按一下开关和换台就行了.有必要了解电视的内部结构吗?有必要了解显像管吗? 封装是为了隐藏对象内部的复杂性,只对外公开简单的接口.便于外界调用,从而提高系统的可扩展性,可 ...

  9. java面向对象三大特性:封装、继承、多态——举例说明

    概念 封装:封装就是将客观的事物抽象成类,类中存在属于这个类的属性和方法. 继承:继承就是把父对象继承过来,这样子类就存在了父类的操作方法,java是单继承,就是只能继承一个父对象. 多态:多态就是程 ...

最新文章

  1. Windbg+sos调试.net笔记
  2. python计算机知识点,最新最全Python基础的知识点复习完整版.pdf
  3. python包接口,Typetalk聊天API的python接口包
  4. 大学计算机系学生,大学计算机专业学生自我介绍
  5. 如何调整自定义标签样式
  6. C++学习之路 | PTA乙级—— 1083 是否存在相等的差 (20 分)(精简)
  7. 规模数据导入高效方式︱将数据快速读入R—readr和readxl包
  8. Docker教程小白实操入门(21)--如何备份、恢复数据卷
  9. arduino学习系列——DHT11温湿度传感器的使用
  10. linux搭建dlna媒体服务器,Serviio:一款功能强大的DLNA媒体服务器软件
  11. 处理 JS中 undefined 的7个技巧
  12. nginx配置详解及设置代理服务器(1)
  13. win11硬盘分区如何合并 windows11硬盘分区合并的解决方法
  14. NETDMIS5.0边界点检测2023
  15. 遇到Process finished with exit code -1073740791 (0xC0000409)实在不能解决的时候要注意
  16. win10之定时关机
  17. 6-4 输入年份和天数,输出对应的年、月、日 (15分)
  18. 7-33 有理数加法 (15 分)
  19. 海尔集团CEO/张瑞敏•演讲语录!
  20. Mac电脑移动硬盘文件呈灰色,无法打开怎么办?

热门文章

  1. html如何设置展开全文,Js实现点击查看全文(纯手工代码)
  2. 读书分享:《数学之美》中的一些关键名词
  3. “宽客鼻祖”的诞生——爱德华·索普
  4. vue2.0怎么渲染html,vue采坑之——vue里面渲染html 并添加样式
  5. 手机vnc远程桌面,手机vnc远程桌面教程,配置详解
  6. 系统分析师-2021年下午简答题
  7. 企业咨询行业拓客的10个经典方法
  8. Axure旋转与移动效果
  9. HTML+CSS+JS实现 ❤️ 立方体旋转图片切换特效❤️
  10. FlutterWeb性能优化探索与实践