Java总结(一):封装——Encapsulation
官方定义:一种将抽象性函式接口的实作细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数
据被外部类定义的代码随机访问。
大白话定义:通过getter和setter方法访问私有的在成员变量。
功能:
1、更容易修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
2、可以对成员变量进行更精确的控制。
例子:
1、更容易修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
eg. 把下列age类型从 int 改成 String。
class Husband{
public int age; // public
public String name;
}
class Wife{
private int age; // private
private String name;
void setAge(int age){
this.age = age;
}
void setName(String name){
this.name = name;
}
int getAge(){
return age;
}
String getName(){
return name;
}
}
public class TestEncapsulation {
public static void main(String[] args) {
Husband h1 = new Husband();
h1.age = 21;
h1.name = "a1";
Husband h2 = new Husband();
h2.age = 22;
h2.name = "a2";
Wife w1 = new Wife();
w1.setAge(18);
w1.getAge();
Wife w2 = new Wife();
w2.setAge(19);
w2.getAge();
System.out.println(h1.age);
System.out.println(w2.getAge());
}
}
改:Husband 类 要改外设调用程序;Wife 类需内改动。同时,假设有100个Husband对象和100个Wife对象,显然改Wife 类要容易。
1 class Husband{
2 public String age; // 改成 String
3 public String name;
4 }
5
6 class Wife{
7 private String age; // 改成 String
8 private String name;
9
10 void setAge(int age){
11 this.age = String.valueOf(age);
12 }
13
14 void setName(String name){
15 this.name = name;
16 }
17
18 String getAge(){ // 改成 String
19 return age;
20 }
21
22 String getName(){
23 return name;
24 }
25
26 }
27
28
29 public class TestEncapsulation {
30 public static void main(String[] args) {
31 Husband h1 = new Husband();
32 h1.age = “21”; // 改调用程序
33 h1.name = "a1";
34
35 Husband h2 = new Husband();
36 h2.age = "22";
37 h2.name = "a2";
38
39
40 Wife w1 = new Wife();
41 w1.setAge(18);
42 w1.getAge();
43
44 Wife w2 = new Wife();
45 w2.setAge(19);
46 w2.getAge();
47
48
49
50 System.out.println(h1.age);
51 System.out.println(w2.getAge());
52
53 }
54 }
2、可以对成员变量进行更精确的控制。
eg. 对于Husband类的 age 属性可能会误操作成
Husband h1 = new Husband();
h1.age = ; // hi.age = -20;
h1.name = "a1";
可以通过setter方法来避免这类错误
void setAge(int age){
if(age<0||age>120){
System.out.println("age is wrong!");
}else{
this.age = age;
}
}
Java总结(一):封装——Encapsulation的更多相关文章
- java面向对象之 封装 Encapsulation
什么是封装:对象中的成员该隐藏的隐藏.该公开的要公开 封装:顾名思义,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据和行为(或功能)相结合,形成一个有 ...
- Java基础-面向对象第一特性之封装(Encapsulation)
Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...
- Java方法的封装
类的封装性即不能让外面的类随意修改一个类的成员变量: 在定义一个类的成员(包括变量和方法),使用private关键字说明这个成员的访问权限,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调 ...
- java类的封装、继承、多态
一.封装(encapsulation) 封装性就是把类(对象)的属性和行为结合成一个独立的相同单位,并尽可能隐蔽类(对象)的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系.封装的特 ...
- Java基础04 封装与接口
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型.对 ...
- Java面向对象(封装性概论)
Java面向对象(封装性概论) 知识概要: (1)面向对象概念 (2)类与对象的关系 (3)封装 (4)构造函数 (5)this关键字 (6)static关键 ...
- Java基础04 封装与接口(转载)
数据成员和方法都是同时开放给内部和外部的.在对象内部,我们利用this来调用对象的数据成员和方法.在对象外部,比如当我们在另一个类中调用对象的时,可以使用 对象.数据成员 和 对象.方法() 来调用对 ...
- java之类的封装
类和对象成员变量,成员函数特殊的成员变量和成员函数 函数重载 构造函数 静态变量 静态函数面向对象:封装 继承 多态封装 Encapsulation为什么需要封装?外界无法直接操作对象的具体的属性(安 ...
- Java基础之封装
封装(Encapsulation)是java面向对象的三大特性,之前学java迷迷糊糊,一直也没弄清楚什么是封装以及为什么要封装,直到这次看书才有一种被点醒的感觉. java中的封装是针对某个类而言的 ...
- 面向对象第一个特征-封装(Encapsulation)
面向对象第一个特征-封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装概述(Encapsulation) 1>.什么是封装 是指隐藏对 ...
随机推荐
- JS验证URL正则
方法一: function fIsUrL(sUrl) { var sRegex = '^((https|http|ftp|rtsp|mms)?://)' + '?(([0-9a-z_!~*\'().& ...
- python 日志收集系统
服务器端: #!/usr/bin/env python # -*- coding:utf-8 -*- import socket ip_port = ('0.0.0.0',9999) sk = soc ...
- MD5 (摘要加密)
MD5 约定 同样的密码,同样的加密算法,每次加密的结果是不一样 密码方案 方案一:直接 MD5 pwd = pwd.md5String; 非常不安全 方案二 MD5 + 盐 pwd = [pwd s ...
- 工作中一个简单的shell程序
下面是工作中用到的链接数据库的shell程序. #!/bin/bash ] ; then echo "prase is wrong ,please check first" exi ...
- 关于轻松安装LNMP和LAMP的编译环境
http://lnmp.org/install.html 系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要2GB以上硬盘剩余空间 1 ...
- 解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX
从网上抓了一些字节流,想打印出来结果发生了一下错误: UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position ...
- Js设置及获取Cookie的方法
Login页面设置Cookie: <script type="text/javascript"> if(json.result=="true") { ...
- 基于iSCSI的SQL Server 2012群集测试(二)--SQL群集安装后初始化配置测试
4.群集安装后初始化配置测试 4.1 禁用full-text 服务和Browser服务 Full-text服务:公司目前暂不使用,需在两个节点上分别禁用 Browser服务:为保证安全,建议将Brow ...
- dfs序 + RMQ = LCA
dfs序是指你用dfs遍历一棵树时,每个节点会按照遍历到的先后顺序得到一个序号.然后你用这些序号,可以把整个遍历过程表示出来. 如上图所示,则整个遍历过程为1 2 3 2 4 5 4 6 4 2 1 ...
- cf306 C. Divisibility by Eight(数学推导)
C. Divisibility by Eight time limit per test 2 seconds memory limit per test 256 megabytes input sta ...