Java——OOP三大特性之封装性(Encapsulation)通俗详细_java encapsulation-程序员宅基地

技术标签: 面向对象  Java  三大特性  通俗  封装  

面向对象(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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44551646/article/details/93721343

智能推荐

java快捷键调字体_设置MyEclipse编码、补全快捷键、字体大小-程序员宅基地

文章浏览阅读534次。一、设置MyEclipse编码(1)修改工作空间的编码方式:Window-->Preferences-->General-->Workspace-->Text file encoding(2)修改一类文件的编码方式:Window-->Preferences-->General-->content Types-->修改default Encoding(..._java修改快捷缩写内容

解析蓝牙原理_蓝牙原理图详解-程序员宅基地

文章浏览阅读1.4w次,点赞19次,收藏76次。1.前言市面上关于Android的技术书籍很多,几乎每本书也都会涉及到蓝牙开发,但均是上层应用级别的,而且篇幅也普遍短小。对于手机行业的开发者,要进行蓝牙模块的维护,就必须从Android系统底层,至少框架层开始,了解蓝牙的结构和代码实现原理。这方面的文档、网上的各个论坛的相关资料却少之又少。分析原因,大概因为虽然蓝牙协议是完整的,但是并没有具体的实现。蓝牙芯片公司只负责提供最底层的API_蓝牙原理图详解

从未在一起更让人遗憾_“从未在一起和最终没有在一起哪个更遗憾”-程序员宅基地

文章浏览阅读7.7k次。图/源于网络文/曲尚菇凉1.今天早上出门去逛街,在那家冰雪融城店里等待冰淇淋的时候,听到旁边两个女生在讨论很久之前的一期《奇葩说》。那期节目主持人给的辩论题是“从未在一起和最终没有在一起哪个更遗憾”,旁边其中一个女生说,她记得当时印象最深的是有个女孩子说了这样一句话。她说:“如果我喜欢一个人呢,我就从第一眼到最后一眼,把这个人爱够,把我的感觉用光,我只希望那些年让我成长的人是他,之后的那些年他喝过..._从未在一起更遗憾

【CSDN精选】基于龙芯1B200的rt-thread基础_龙芯1b200参数-程序员宅基地

文章浏览阅读927次,点赞15次,收藏13次。龙芯是中国的一款自主设计的处理器架构,由中国科学院计算技术研究所(ICT)主导研发。龙芯处理器最早的版本为Loongson-1,其后发展出Loongson-2、Loongson-3等系列。这些处理器主要用于高性能计算、服务器、嵌入式系统等领域。Loongson架构具有独立知识产权,是中国自主研发的一种指令集架构。龙芯的设计旨在实现对计算机体系结构的自主掌握,减少对外部知识产权的依赖。RT-Thread(Real-Time Thread)是一个开源的实时嵌入式操作系统。_龙芯1b200参数

Python函数知识点(详解)-程序员宅基地

文章浏览阅读6w次,点赞584次,收藏2.9k次。本篇总结了Python函数相关的基础知识点,代码案例超详细,欢迎阅读,交流!_python函数知识点

虚拟机如何在net模式下进行联网_虚拟机net网络-程序员宅基地

文章浏览阅读1.7k次,点赞3次,收藏7次。虚拟机如何在net模式下进行联网(centos7)1.首先你需要先将虚拟机安装好,如果不会可以参考[centos7安装教程](https://blog.csdn.net/qq_44714603/article/details/88829423?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161949204316780274178621%2522%252C%2522scm%2522%253A%252220140713.130102334…_虚拟机net网络

随便推点

强化学习在制造业领域的应用:智能制造的未来-程序员宅基地

文章浏览阅读223次,点赞3次,收藏5次。1.背景介绍制造业是国家经济发展的重要引擎,其产能和质量对于国家经济的稳定和发展具有重要意义。随着工业技术的不断发展,制造业的生产方式也不断发生变化。传统的制造业通常依赖于人工操作和手工艺,这种方式的缺点是低效率、低产量和不稳定的质量。随着信息化、智能化和网络化等新技术的出现,制造业开始向智能制造迈出了第一步。智能制造的核心是通过大数据、人工智能、计算机视觉等技术,实现制造过程的智能化、自动化...

ansible--安装与使用_pip安装ansible-程序员宅基地

文章浏览阅读938次。系列文章目录文章目录系列文章目录 前言 一、ansible是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言菜鸟一只,刚开始使用,仅作以后参考使用。边学习,边记录,介绍一下最基础的使用,可能会有理解不到位的地方,可以共同交流,废话不多说,走起。一、ansible 简介?ansible是自动化运维工具的一种,基于Python开发,可以实现批量系统配置,批量程序部署,批量运行命令,ansible是基于模块工作的,它本身没有批量部署的能力,真正.._pip安装ansible

RPMs系列卟啉框架材料ZnMn-RPM/AZn-RPM/FeZn-RPM/ZnPO-MOF齐岳供应金属-四羧基苯基卟啉(M-TCPPs)及三维框架卟啉材料[Cu(TPyP)Cu2Mo3O1]_fezn-5是什么意思-程序员宅基地

文章浏览阅读298次。RPMs系列卟啉框架材料ZnMn-RPM/AZn-RPM/FeZn-RPM/ZnPO-MOF齐岳供应金属-四羧基苯基卟啉(M-TCPPs)及三维框架卟啉材料[Cu(TPyP)Cu2Mo3O1]_fezn-5是什么意思

51单片机与ESP8266-01s模块通讯点灯_51单片机与eps826601s通信-程序员宅基地

文章浏览阅读9.9k次,点赞10次,收藏92次。前言 本文章为方便新手上手直接用最简单的点灯展示,关于ESP8266-01s的AT指令类就上网搜有很多这就不多讲了。接线ESP-01S USB转TTL 51单片机 VCC 3.3V 3.3V GND GND GND EN 3.3V 3.3V TX RX P3.0 RX TX P3.1 IO0(注刷固件时插) GND(注刷固件时插) 一、ESP8266-01S接US..._51单片机与eps826601s通信

麒麟820也迎来鸿蒙系统,魅族适配麒麟820系统 和鸿蒙OS,魅族要入赘华为系-程序员宅基地

文章浏览阅读188次。蜗居在珠海的小厂魅族,虽然是“小厂”,但是其一路走来的历史,一直被科技圈津津乐道,而深入简出的带头大哥黄章,更是魅友的精神领袖。魅族是一个很低调的企业,但是却有这样一种魅力,总能有意无意的成为新闻的主角,比如近日知名科技大V中国IT杂谈发布了这样一条微博:魅族正在适配麒麟820和鸿蒙系统,未来还要加入华为系。关于这条信息的真实性后面再说,我们先来讨论下华为和魅族是否真的可以成为CP,共同走向人生巅..._鸿蒙420支持麒麟820吗

推荐文章

热门文章

相关标签