[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语言来讲,最小的封装体就是函数.类也是封装体.框架本身也是封装体.这些都一个共性,就是我们能够不知道实现细节,直接拿来用就能够了.

时间: 2024-08-29 20:00:33

[javase学习笔记]-6.7 封装的相关文章

javasE学习笔记:关键字super的使用

/* super 的作用: 1 . super可以在子类中引用父类的成员,通过 .的方式和属性.this相对应. 2. 在子类的构造方法中可以可使用super(参数列表)语句调用父类的构造方法 3. 注意: 子类的构造方法中一定要调用父类的构造方法.... */ javasE学习笔记:关键字super的使用,布布扣,bubuko.com

JavaSE 学习笔记之封装(四)

封 装(面向对象特征之一):是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处:将变化隔离:便于使用:提高重用性:安全性. 封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问. 封装是为了解决数据的安全性 继承是为了解决代码的重用性 多态是为了解决代码的扩展性 this:代表对象.就是所在函数所属对象的引用. this到底代表什么呢?哪个对象调用了this所在的函数,this就代表哪个对象,就是哪个对象的引用. 开发时,什么时候使用this呢? 在定义功能时

JavaSE学习笔记(五)——类与对象

一.  类和对象 1.1           面向对象与面向过程的区别 1.面向过程 采用面向过程必须了解整个过程,每个步骤都有因果关系,每个因果关系都构成了一个步骤,多个步骤就构成了一个系统,因为存在因果关系每个步骤很难分离,非常紧密,耦合度高,当任何一步骤出现问题,将会影响到所有的系统.如:采用面向过程生产电脑,那么他不会分CPU.主板和硬盘,它会按照电脑的工作流程一次成型. 2.面向对象 面向对象对会将现实世界分割成不同的单元(对象),实现各个对象,如果完成某个功能,只需要将各个对象协作起

JavaSE学习笔记(一)———Java简介与基础

一.  Java语言简介 1.1           计算机语言的发展过程 计算机语言发展主要分为三个阶段: 1.第一代:机器语言 2.第二代:低级语言 3.第三代:高级语言 1.2           Java发展简史 1.Java 是一种程序开发语言,既然是一门语言,就像其他语言一样,具备一定的语法 和自己的数据结构. 2.Java语言来源于sun公司,sun指的是斯坦福大学网络.由james gosling领导并开发. Java语言的具体发展历程 1991~1995  Sun 为了占领智能

JavaSE学习笔记21:Java正则表达式

Java正则表达式   1.正则表达式(特点) 正则表达式,顾名思义,就是符合一定规则的表达式.作用是专门用于操作字符串,虽说String类中已经有了很多操作字符串的方法,但是它们的功能单一,操作起来还麻烦,正则弥补了它们的补足. 下面我们通过一个小例子来感受一下区别: 需求:对QQ号码进行校验,要求:5~15位,0不能开头,只能是数字. (1)常规的做法: class CheckQQ { public static void main(String[] args) { String qq="3

[javase学习笔记]-7.12 static关键字的使用场景

这一节我们来看一下在我们开发的过程中,在什么时候我们要用到static关键字进行静态修饰. 我们这里所说的静态,无非就是两种,一种是静态变量,一种是静态函数,我们分这两种情况进行说明static关键字的使用场合. 一.静态变量 我们在7.8节中对static关键字特点和7.9节中成员变量与静态变量区别进行学习的时候就已经很明确的指出了静态变量是共享数据,而对象中封装的特有数据. 因此我们可以这样解释:当分析对象中所具备成员变量的值是相同的,且不需要对象做修改,这时这个成员变量就可以被static

javaSE学习笔记—HTTP协议(10)

客户端浏览器和服务器Tomcat要进行基本的请求和响应的处理. 其实浏览器和服务器通信的数据的格式已经使用协议进行固定好了,只要双方发送固定格式的数据,那么就可以完成基本的通信. 如果开发者需要查看这样的数据格式,那么就需要安装一个浏览器的HTTP协议相关的插件. 如果要深入的学习浏览器和服务器通信的数据,那么需要详细的掌握他们之间发送的数据内容. 1  请求信息 GET / HTTP/1.1 ? 请求行 Accept: */* Accept-Language: zh-cn,en-US;q=0.

[javase学习笔记]-6.5 类类型參数与匿名对象

这一节我们来说说类类型參数和匿名对象. 我们继续用之前的小汽车类吧 class Car { int num;//这是轮胎数属性 String color;//这是颜色属性 String brand;//这是品牌性 void start()//启动行为 { System.out.println("小汽车已启动"); } void run()//这就是执行行为 { System.out.println(num+"..."+color+"..."+br

[javase学习笔记]-8.5 statickeyword的使用场景

这一节我们来看一下在我们开发的过程中,在什么时候我们要用到statickeyword进行静态修饰. 我们这里所说的静态.无非就是两种.一种是静态变量,一种是静态函数,我们分这两种情况进行说明statickeyword的使用场合. 一.静态变量 我们在7.8节中对statickeyword特点和7.9节中成员变量与静态变量差别进行学习的时候就已经非常明白的指出了静态变量是共享数据,而对象中封装的特有数据. 因此我们能够这样解释:当分析对象中所具备成员变量的值是同样的.且不须要对象做改动,这时这个成