[javase学习笔记]-6.7 封装
这一节我们学习面向对象中的第一个特性,封装(encapsulation)
封装:是指隐藏对象的发生和实现细节,仅对外提供公共訪问方式.
那么什么是隐藏对象的实现细节?
我们来举例学习.
比方我们来定义一个人的类,简单点说,人的属性有年龄,行为有说话.
我们看以下的代码:
class Person//定义一个人的类
{
int age;
void speak()
{
System.out.println("age = "+age);
}
}
class PersonDemo//定义測试类
{
public static void main(String[] args)
{
Person p = new Person();
p.age = -20;//这时代码仍然正常执行了,这就造成了安全隐患
p.speak();
}
}
结果:
我们看到存在安全隐患,当我们为人的年龄属性赋值为负数时,程序是正常执行的.
那么如今把Person类改动一下
<pre name="code" class="java">class Person
{
private int age;
void speak()
{
System.out.println("age = "+age);
}
}
结果:
我们看到报错了,由于我们对age进行了私有,在PersonDemo类中无法訪问.
为了进一步解决这个问题,我们再对两个类进行改动:
class Person
{
private int age;//把该成员属性设置为私有
public void setAge(int a)
{
if(a>0 && a<130)
{
age = a;
speak();
}
else
System.out.println("错误的数据");
}
void speak()
{
System.out.println("age = "+age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person();
p.setAge(-20);//调用方法设置年龄,可是我们不知道该方法的内部实现
}
}
结果:
我们看到当age>0 && age<130时,才合法.
从这个过程我们看到,当我们要操作Person中的age属性时,是通过setAge方法来实现的,可是setAge方法是怎么实现的,外部类是无法知道的,这就是我们所要说的隐藏对象的属性和实现细节,也就是封装.
事实上对于属性的封装,为了外部訪问,我们一般有规范的get和set方法,我们来看一下两个规范且经常使用的方法:
class Person
{
private int age;//把该成员属性设置为私有 public void setAge(int a)//设置年龄
{
age = a;
}
public int getAge()//获取年龄
{
return age;
}
}
以下我们再来说说封装的长处和原则:
长处:
1.提高代码安全性;
2.实现对内部属性的可控性;
3.提高代码的复用性;
4.隔离变化;
原则:
1.将不须要对外提供的内容都隐藏起来;
2.把属性都隐藏起来,提供公共方法供外部訪问(当然不是全部方法都必须是公共方法).
最后我们再看一下刚才我们用到的一个keyword:private.
privatekeyword:指私有,是一个权限修饰符,用于修饰成员.私有的内容仅仅在本类中有效.
它的常见使用方法:就是将成员变量私有化,对外提供相应的set,get方法对其进行訪问.提高对数据訪问的安全性.
注意:私有不过封装的一种体现而已.
对于java语言来讲,最小的封装体就是函数.类也是封装体.框架本身也是封装体.这些都一个共性,就是我们能够不知道实现细节,直接拿来用就能够了.
[javase学习笔记]-6.7 封装的更多相关文章
- javaSE学习笔记(17)---锁
javaSE学习笔记(17)---锁 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8).使用场景进行举例,为读 ...
- javaSE学习笔记(16)---网络编程
javaSE学习笔记(16)---网络编程 基本概念 如今,计算机已经成为人们学习.工作.生活必不可少的工具.我们利用计算机可以和亲朋好友网上聊天,也可以玩网游.发邮件等等,这些功能实现都离不开计算机 ...
- javaSE学习笔记(11)--- Map
javaSE学习笔记(11)--- Map 1.Map集合 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Jav ...
- javaSE学习笔记(10)---List、Set
javaSE学习笔记(10)---List.Set 1.数据存储的数据结构 常见的数据结构 数据存储的常用结构有:栈.队列.数组.链表和红黑树. 1.栈 栈:stack,又称堆栈,它是运算受限的线性表 ...
- JavaSE学习笔记(8)---常用类
JavaSE学习笔记(8)---常用类 1.Object类 java.lang.Object类是Java语言中的根类,即所有类的父类.它中描述的所有方法子类都可以使用.在对象实例化的时候,最终找的父类 ...
- JavaSE学习笔记(3)---面向对象三大特性
JavaSE学习笔记(3)---面向对象三大特性 面向对象的三大特征:继承.封装.多态 1.封装 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改.然 ...
- JavaSE学习笔记(2)---面向对象基础
JavaSE学习笔记(2)---面向对象基础 1.面向对象具有三大特征:封装性.继承性和多态性,而面向过程没有继承性和多态性,并且面向过程的封装只是封装功能,而面向对象可以封装数据和功能.所以面向对象 ...
- javaSE学习笔记(15) ---缓冲流、转换流、序列化流
javaSE学习笔记(15) ---缓冲流.转换流.序列化流 缓冲流 昨天复习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化 ...
- JavaSE学习笔记(14)---File类和IO流(字节流和字符流)
JavaSE学习笔记(14)---File类和IO流(字节流和字符流) File类 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 构造方 ...
随机推荐
- 在Html5中与服务器交互
转自原文 在Html5中与服务器交互 刚刚涉足职场,上头就要我研究HTML5,内嵌到手机上,这对我来说完全是一个陌生的领域,不过也正好给自己一个机会来学习,最近做到要跟服务器交互这部分,这部分可是卡了 ...
- POJ 题目2774 Long Long Message(后缀数组,求最长公共子串长度)
Long Long Message Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 23696 Accepted: 97 ...
- android 极细线
最后找到一个还算好用的方法:伪类 + transform 原理是把原先元素的 border 去掉,然后利用:before或者:after重做 border ,并 transform 的 scale 缩 ...
- 创建一个web user control
1.创建文件 添加,然后选择web user control 2.添加控件 在工具栏搜索button,然后拖动三个button上去 <%@ Control Language="C#&q ...
- What is the difference between Web Farm and Web Garden?
https://www.codeproject.com/Articles/114910/What-is-the-difference-between-Web-Farm-and-Web-Ga Clien ...
- Oracle RAC --安装图解
规划:所用linux系统以虚拟化方式安装在esx上,配置有内网的yum源,各分配有16G存储,下面为简单拓扑图 一,下载软件1,地址:http://www.oracle.com/technology/ ...
- angular与angularjs常用指令的不同写法整理
angularjs与angular 常用的指令写法的区别; 一:angularjs指令 1.ng-bind 使用给定的变量或表达式的值来替换 HTML 元素的内容 <p ng-bind=&quo ...
- [JZOJ 5908] [NOIP2018模拟10.16] 开荒(kaihuang)解题报告 (树状数组+思维)
题目链接: https://jzoj.net/senior/#contest/show/2529/1 题目: 题目背景:尊者神高达作为一个萌新,在升级路上死亡无数次后被一只大黄叽带回了师门.他加入师门 ...
- 004.JMS消息结构
JMS的消息结构类似于HTTP请求的结构分为三部分: 消息头 消息属性 消息体 下面分别说明三部分的内容标准. 1. 消息头 消息头包含消息的识别信息和路由信息,其标准属性如下: 下面介绍的参数都可以 ...
- 如何把非服务程序(一般的应用程序)注册为Windows服务
非服务程序:不是标准的服务形式的程序吧,只是普通的应用程序. 1.要实现这个功能要用到微软提供的两个小工具“instsrv.exe”和“srvany.exe”,工具可以从微软下载安装工具包得到:htt ...