java 第七课 隐藏和封装

作者:无名    it人知识库   2020-02-13 00:00:00

ˉ理解封装

封装(Encapsulation)是面向对象三大特征之一(封装、继承、多态),它指的是将对象的状态信息隐藏在内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。

对一个类或对象实现良好的封装,可以实现以下目的:

μ隐藏类的实现细节。

μ让使用者只能通过事先预定的方法访问数据,从而可以在该方法里加入控制逻辑,限制对属性不合理访问。

μ可进行数据检查,从而有利于保证对象信息的完整性。

μ便于修改,提高代码的可维护性。

为了实现良好的封装,需要从两个方面考虑:

μ将对象的属性和实现细节隐藏起来,不允许外部直接访问。

μ把方法暴露出来,让方法来操作或访问这些属性。

隐藏和封装

使用访问控制符





注意:对于类而言,可以使用public和默认访问控制符修饰,使用public修饰的类可以被所有类使用,不使用任何访问控制符修饰的类只能被同一个包中的所有类访问。

定义Person类,实现良好的封装。

public class Person{

private String name;

private int age;

public void setName(String name) {

//要求用户名必须在2~6位之间

if (name.length() > 6 || name.length() < 2){

System.out.println("您设置的人名不符合要求");

}else{

this.name = name;

}

}


public String getName(){

return this.name;

}

public void setAge(int age){

//要求用户年龄必须在0~100之间

if (age > 100 || age < 0){

System.out.println("您设置的年龄不合法");

}else{

this.age = age;

}

}

public int getAge(){

return this.age;

}

}

注意:属性的getter方法和setter方法有重要的意义,命名应遵循的原则:将原属性名的首字母大写,并在前面分别增加set和get动词,就变成setter和getter方法名 。

访问控制符的使用总结:

μ类中绝大部分属性应该使用 private修饰,除了一些static修饰的、类似全局变量的属性,才考虑使用 public修饰。

μ有些方法只是用于辅助实现该类的其他方法,这些方法被称为工具方法,也应用 private修饰。

μ如果某个类主要用作其他类的父类,该类里包含的大部分方法可能仅希望被其子类重写,而不想被外界直接调用,则应该使用protected修饰这些方法。

μ希望暴露出来给其他类自由调用的方法使用public修饰。

μ顶级类通常都希望被其他类自由使用,所以大部分顶级类都使用public修饰。

ˉ package和import

μ 包:Java中,包(package)是一组相关的类和接口的集合。Java编译器将包与文件系统的目录一一对应起来。

μ

μ

优点:

ü避免大量类的重名冲突,扩大名字空间。

ü包体现了 封装机制

μ 包的创建:如果希望把一个类放在指定的包结构下,应该在Java源程序的 第一个非注释行放如下格式的代码:package packageName[.packageName[…]];

μ

例4.18 包的创建。

package hbsi;

public class HelloWorld{

public static void main(String[] args) {

System.out.println("Hello World!");

}

}

注意:

ü包名是有效地标识符即可,但从可读性规范角度来看,包名应该全部由小写字母组成。

ü为了避免不同公司之间类名的重复,Sun建议使用单位Internet域名倒写来作为包名,

üpackage语句必须作为源文件的第一句非注释性语句,一个源文件只能指定一个包,该源文件中可以定义多个类,则这些类将全部位于该包下。

ü如果没有显示指定package语句,则处于无名包下。实际企业开发中,通常不会把类定义在无名包下。

μ 包中类的使用

如果要使用包中的类,可以有两种方法:

ü引用包中的类(使用类的全限定名称)myPackage .mySubPackage . Book bookObj=new myPackage .mySubPackage . Book();

üimport语句引入包中的类
格式:import 包名 .类名;
或 import 包名 .*; //“*”号表示所有类
例如: import myPackage .mySubPackage.*;
Book bookObj=new Book();

注意:在引入具有层次结构的包时,“*”号仅仅表示该包中的所有类,如果该包中还有子包,那么子包中的类时不被包括的。


μ比较两种方法的优缺点:

ü适用包名作前缀的方法使程序清晰,很容易就看出所使用的类位于哪个包中;而引入包的方法要知道某个类所在的包比较困难.

ü使用引入包的方法会带来名字冲突的问题,而使用包名作前缀不会存在这样的问题.

ü使用包名作前缀书写程序时比较麻烦.

μ静态导入
JDK1.5以后更是增加了一种静态导入的语法,它用于导入指定类的某个静态属性值或全部静态属性值。

ü导入指定类单个静态属性
import static 父包.子包…类名.静态属性名;
例:import static java.lang.System.out;

ü导入指定类全部静态属性
import static 父包.子包…类名.*;
例:import static java.lang.Math.*;



本文内容由it人知识库(原文链接:https://m.itpeo.net/12806/3708372.html)本站为各位整理

Tag:第七隐藏暗藏以及封装



我要分享:

  • 微信
  • QQ好友
  • QQ空间
  • 新浪微博


热门推荐

jfinal分辨请求是否为multipart/form-data

jfinal分辨请求是否为multipart/form-data

if (content_type == null || cont... ...

thinkphp __PUBLIC__的定义 __ROOT__等常量的定义

thinkphp __PUBLIC__的定义 __ROOT__等常量的定义

'__TMPL__'      => ... ...

Mirantis OpenStack fuel web 安装 使用

Mirantis OpenStack fuel web 安装 使用

MirantisOpenStack-4.0.iso的下载地址:http://pan.baidu.com/s/1dD... ...

通过Fuel部署Openstack

通过Fuel部署Openstack

openstack,安装的门槛比较高,而且相当麻烦,很多的安装文档作者省了不少安装步骤。这对初学的人带来了很大的麻... ...

OpenStack监控测量服务Ceilometer安装及 API说明

OpenStack监控测量服务Ceilometer安装及 API说明

1.Ceilometer是做什么的Ceilometer是OpenStack中的一个子项目,它像一个漏斗一样,能把O... ...

UIApplicationMain方法介绍

UIApplicationMain方法介绍

在IOS程序的main函数中执行了一个UIApplicationMain这个函数,下面介绍以下这个函数的作用。 &... ...

Info.plist和pch文件的作用

Info.plist和pch文件的作用

在IOS开发中有两个常见文件“工程名-Info.plist”和“工程名-Prefix.pch”文件,下面介绍一下这两个文... ...

IOS开发计算文本尺寸

IOS开发计算文本尺寸

在IOS开发中例如微博,QQ聊天界面中要显示大量的文字信息,这样需要计算出文字部分的尺寸,才能设计出合适的控件尺寸和位置... ...

『摄影师访谈』Walker Evans,摄影是对事物本身的超越

『摄影师访谈』Walker Evans,摄影是对事物本身的超越

Walker Evans(1903-1975)为美国农场安全管理局(Farm Security Administ... ...

NodeJs 多核多进程并行框架实作

NodeJs 多核多进程并行框架实作

多核编程的重要性无需多说, 我们直奔主题,目前nodejs 的网络服务器有以下几种支持多进程的方式: #1 开... ...

"[如意猎奇]社会各行业内幕 各位看客斟酌看待

3楼 我是相机促销员 其实像一般大点的卖场 很热心的跟你去介绍的人 肯定不是为了帮你介绍一款好点的东西。... ...

DotNet持续集成环境构建及配置之安装篇

DotNet持续集成环境构建及配置之安装篇

DotNet持续集成环境构建及配置之安装篇 准备工作: 安装Windows Server 2003及最新补丁... ...

我们用一个实例CISample来说明怎么配置CC.Net、VSS等。

我们用一个实例CISample来说明怎么配置CC.Net、VSS等。

我们用一个实例CISample来说明如何配置CC.Net、VSS等。 持续集成服务器源代码管理器配置: 从程序里... ...

java 框架

java 框架

  A 代码生成器(开发利器);  B 阿里数据库连接池drui... ...

MINA学习笔记四——第三章Session

MINA学习笔记四——第三章Session

第四章 会话 会话是MINA的核心:每次一个客户端连接到服务器,一个新的会话将被创建,而且该会话在客户端连... ...

MINA学习笔记三——第三章 IoService

MINA学习笔记三——第三章 IoService

第三章 IoService        一个... ...

sql 语句使用

sql 语句使用

1. 有一张表t_stu;其中三个字段:name,gender,grade;要求用一条sql语句查出男生前5名和女生前五... ...

oracle安装及体系结构

oracle安装及体系结构

1. 安装 数据库名:sid (系统标识符) + 后缀 10G过后,安装过程中要求修改SYS(默认manag... ...

Struts2系列之一:构建struts2项目

Struts2系列之一:构建struts2项目

Struts2系列之二:页面传值 Struts2系列之三:注解式Action 1. 新建一个Mave... ...

Page_Load()

Page_Load()

Page_Load,即页面载入要执行的事件; Page_Load的执行分为两种情况; 1.Page_Load事件的... ...

最新IT资讯

必填

◎已有 0 人评论


电脑版

版权所有:IT人知识库 m.itpeo.net

返回顶部

本网站部分内容来自互联网,版权归原作者所有,文章内容仅代表原作者个人观点,如有侵权请联系我们删除