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]
例如,将你的卧室看作一个对象,卧室内部的装饰物,家具等本应都是卧室的私有属性,但是如果没有墙壁的遮挡,别人就会对屋里的任何东西一清二楚,甚至你在卧室里的一举一动都会被别人看到。正是因为这堵墙的存在,卧室的装饰品,家具等才不被外界所看到,我们甚至在卧室任意更改家具位置,改变装修风格也不会影响到其他人。但是没有门,这个被包裹的严严实实的黑盒子又有什么用呢,卧室的门就是通往外界的主要途径。
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.降低耦合度
耦合度:耦合性是编程中的一个判断代码模块构成质量的属性,不影响已有功能,但影响未来拓展,与之对应的是内聚性
例如:卧室的窗户与墙壁,如果窗子是扣死在墙里的 ,那么修改窗子时,就必须修改墙,这就比较紧密了,但是如果你窗子是按照某种规格的 可以自由拆装的 那么修改的代价就小,耦合度也就低了
在程序中我们要求 高内聚,低耦合!
鼠标右键->Source->Generate Getters and Setters->选择需要用getset的属性->generate
reference:
1.https://www.tutorialspoint.com/java/java_encapsulation.htm
文章浏览阅读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.今天早上出门去逛街,在那家冰雪融城店里等待冰淇淋的时候,听到旁边两个女生在讨论很久之前的一期《奇葩说》。那期节目主持人给的辩论题是“从未在一起和最终没有在一起哪个更遗憾”,旁边其中一个女生说,她记得当时印象最深的是有个女孩子说了这样一句话。她说:“如果我喜欢一个人呢,我就从第一眼到最后一眼,把这个人爱够,把我的感觉用光,我只希望那些年让我成长的人是他,之后的那些年他喝过..._从未在一起更遗憾
文章浏览阅读927次,点赞15次,收藏13次。龙芯是中国的一款自主设计的处理器架构,由中国科学院计算技术研究所(ICT)主导研发。龙芯处理器最早的版本为Loongson-1,其后发展出Loongson-2、Loongson-3等系列。这些处理器主要用于高性能计算、服务器、嵌入式系统等领域。Loongson架构具有独立知识产权,是中国自主研发的一种指令集架构。龙芯的设计旨在实现对计算机体系结构的自主掌握,减少对外部知识产权的依赖。RT-Thread(Real-Time Thread)是一个开源的实时嵌入式操作系统。_龙芯1b200参数
文章浏览阅读6w次,点赞584次,收藏2.9k次。本篇总结了Python函数相关的基础知识点,代码案例超详细,欢迎阅读,交流!_python函数知识点
文章浏览阅读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.背景介绍制造业是国家经济发展的重要引擎,其产能和质量对于国家经济的稳定和发展具有重要意义。随着工业技术的不断发展,制造业的生产方式也不断发生变化。传统的制造业通常依赖于人工操作和手工艺,这种方式的缺点是低效率、低产量和不稳定的质量。随着信息化、智能化和网络化等新技术的出现,制造业开始向智能制造迈出了第一步。智能制造的核心是通过大数据、人工智能、计算机视觉等技术,实现制造过程的智能化、自动化...
文章浏览阅读938次。系列文章目录文章目录系列文章目录 前言 一、ansible是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言菜鸟一只,刚开始使用,仅作以后参考使用。边学习,边记录,介绍一下最基础的使用,可能会有理解不到位的地方,可以共同交流,废话不多说,走起。一、ansible 简介?ansible是自动化运维工具的一种,基于Python开发,可以实现批量系统配置,批量程序部署,批量运行命令,ansible是基于模块工作的,它本身没有批量部署的能力,真正.._pip安装ansible
文章浏览阅读298次。RPMs系列卟啉框架材料ZnMn-RPM/AZn-RPM/FeZn-RPM/ZnPO-MOF齐岳供应金属-四羧基苯基卟啉(M-TCPPs)及三维框架卟啉材料[Cu(TPyP)Cu2Mo3O1]_fezn-5是什么意思
文章浏览阅读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通信
文章浏览阅读426次。1_如何在centos7虚拟机上将tomcat与mysql链接
文章浏览阅读188次。蜗居在珠海的小厂魅族,虽然是“小厂”,但是其一路走来的历史,一直被科技圈津津乐道,而深入简出的带头大哥黄章,更是魅友的精神领袖。魅族是一个很低调的企业,但是却有这样一种魅力,总能有意无意的成为新闻的主角,比如近日知名科技大V中国IT杂谈发布了这样一条微博:魅族正在适配麒麟820和鸿蒙系统,未来还要加入华为系。关于这条信息的真实性后面再说,我们先来讨论下华为和魅族是否真的可以成为CP,共同走向人生巅..._鸿蒙420支持麒麟820吗