- 浏览: 82043 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
iqeq00:
09年我暑假培训的 在东软,估计一开学你就培训了...
加入东软培训。。。 -
javacto:
TJGirl 写道想问一下你 在东软那里培训的好吗?培训也就是 ...
加入东软培训。。。 -
TJGirl:
想问一下你 在东软那里培训的好吗?
加入东软培训。。。 -
javacto:
hurricane1026 写道
绝影就是个写网络小说的写手. ...
尊重别人就是尊重自己 -
hurricane1026:
绝影就是个写网络小说的写手.不能算程序员吧。
尊重别人就是尊重自己
访问控制符的作用是说明被声明的内容(类、属性、方法和构造方法)的访问权限,就像发布的文件一样,在文件中标注机密,就是说明该文件可以被那些人阅读。
访问控制在面向对象技术中处于很重要的地位,合理的使用访问控制符,可以通过降低类和类之间的耦合性(关联性)来降低整个项目的复杂度,也便于整个项目的开发和维护。具体的实现就是通过访问控制符将类中会被其它类调用的内容开放出来,而把不希望别人调用的内容隐藏起来,这样一个类开放的信息变得比较有限,从而降低了整个项目开放的信息,另外因为不被别人调用的功能被隐藏起来,在修改类内部隐藏的内容时,只要最终的功能没有改变,即使改变功能的实现方式,项目中其它的类不需要更改,这样可以提高了代码的可维护性,便于项目代码的修改。
在Java语言中访问控制权限有4种,使用三个关键字进行表达,依次如下:
<!--[if !supportLists]-->l <!--[endif]-->public——公共的
<!--[if !supportLists]-->l <!--[endif]-->protected——受保护的
<!--[if !supportLists]-->l <!--[endif]-->无访问控制符——默认的
<!--[if !supportLists]-->l <!--[endif]-->private——私有的
其中无访问控制符是指不书写任何的关键字,也代表一种访问权限,访问控制符的使用示例如下所示:
public class AccessControl {
int n;
public AccessControl(){
init();
}
private void init(){}
protected void test(int k){}
}
该示例代码中演示了各个访问控制符的实际使用示例,其中属性n的访问控制符就是默认的。
在实际使用时,类声明的访问控制符只有2个:public和无访问控制符,属性声明、构造方法声明和方法声明的访问控制符可以是以上4种中的任何一个。
这4个访问控制符的权限作用如下表所示:
访问控制符 |
同一个类内部 |
同一个包内部 |
不同包中的子类 |
不同包中的非子类 |
public |
Yes |
Yes |
Yes |
Yes |
protected |
Yes |
Yes |
Yes |
No |
无访问控制符 |
Yes |
Yes |
No |
No |
private |
Yes |
No |
No |
No |
说明:在该表中,Yes代表具备对应的权限,No代表不具备对应的权限。
在4种访问控制中,public一般称作公共权限,其限制最小,也可以说没有限制,使用public修饰的内容可以在其它所有位置访问,只要能访问到对应的类,就可以访问到类内部public修饰的内容,一般在项目中开放的方法和构造方法使用public修饰,开放给项目使用的类也使用public修饰。protected一般称作继承权限,使用protected修饰的内容可以被同一个包中的类访问也可以在不同包内部的子类中访问,一般用于修饰只开放给子类的属性、方法和构造方法。无访问控制符一般称作包权限,无访问控制符修饰的内容可以被同一个包中的类访问,一般用于修饰项目中一个包内部的功能类,这些类的功能只是辅助其它的类实现,而为包外部的类提供功能。private一般称作私有权限,其限制最大,类似于文件中的绝密,使用private修饰的内容只能在当前类中访问,而不能被类外部的任何内容访问,一般修饰不开放给外部使用的内容,修改private的内容一般对外部的实现没有影响。
下面以两个基本的示例来说明访问控制符在实际项目中的使用方式。
第一个使用示例:在项目中,一般不会将类的属性开放给其它的类,也就是不允许外部的类直接访问属性,而是使用对应的存取方法来进行访问。例如在学校的学员管理系统中,需要实现的学生类,按照访问控制符的一般使用规则,实现的代码如下:
/**
* 学员类,演示访问控制符的使用
*/
public class Student {
/**年龄*/
private int age;
/**学员ID*/
private int id;
public int getAge() {
return age;
}
public void setAge(int age) {
if(age < 0){
//处理代码,未实现
}
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
//校验id是否合法的代码,未实现
this.id = id;
}
}
通过将属性的访问权限设定为private,限制所有类外部对属性的访问,而为了让外部可以访问这些属性,专门声明对应的get/set方法来读取/存储数据,这样在设置属性值的set方法中,可以对于参数做出基本的校验,在上面的示例代码中,留出了校验参数的位置,具体的代码未在示例代码中实现。
小技巧:在eclipse中,get和set方法可以在选中对应类的代码以后,使用“Source”菜单中的“Generate Getters and Setters…”菜单实现。
第二个使用示例:在项目中,一般为了设计的需要实现一些特定的功能,下面介绍一下使用访问控制符实现的一个功能——使一个类既不能创建对象也不能被继承。实现的方法如下:该类中只实现一个构造方法,而且将该构造方法的访问权限设置为私有的。具体实现代码如下:
/**
* 不能创建对象且不能被继承的子类
*/
public class PrivateDemo {
private PrivateDemo(){}
}
在该示例中,PrivateDemo类只有一个构造方法,且该构造方法为私有。按照以前的介绍,创建对象时需要调用构造方法,而private修饰的构造方法无法在类的外部进行访问,所以无法创建对象。另外,在子类的构造方法中也需要调用父类的构造方法,由于private的构造方法无法得到调用,所以该类也不可以有对应的子类。
这里说明的只是两个基本的用途,在实际的项目中,可以根据需要灵活的使用访问控制符实现对应的功能。
总之,访问控制符通过控制声明的内容的访问权限,实现对于内容的隐藏,从而降低使代码的耦合性降低,降低项目的复杂度,并且方便实际项目中代码的维护。
转自:http://blog.csdn.net/Mailbomb/
发表评论
-
变量调用与继承
2010-07-28 02:00 823class A { protected int i = 3 ... -
究竟什么是POJO?
2009-10-13 20:47 785POJO(Plain Old Java Object)这种叫 ... -
JAVA开发者最常去的20个英文网站
2009-09-25 20:04 516JAVA开发者最常去的20个英文网站1.[http://w ... -
网络学习【017】
2009-05-04 08:54 724-------1----------------------- ... -
Thread(下) 【016】
2009-05-01 10:47 913-------TestDeadLock------------ ... -
Thread(上) 【015】
2009-04-30 17:41 1135//、、、、、创建线程的方法一、、、、、、、、、、、、、、、、 ... -
ObjectIO 【014】
2009-04-30 02:22 651package com.testobjectio; im ... -
PrintIO 【013】
2009-04-30 02:20 652*****1.************************ ... -
DataIO 【012】
2009-04-30 02:17 756package com.testdatastream; ... -
Transform IO 【011】
2009-04-30 02:16 653package com.testiotransform_1 ... -
BufferedIO 【010】
2009-04-29 01:18 866package com.testbuffered; im ... -
IOSummarize
2009-04-28 21:59 3811.java.io 包中流类型的分类: 按数据流的 ... -
IO_FileInput(Output)Stream【009】
2009-04-28 21:52 770package com.teststream; impo ... -
character/byte/ coding __字符,字节和编码
2009-04-28 18:03 912摘要:本文介绍了字符 ... -
Generic(泛型),good【008】
2009-04-27 18:11 641package com.tesgeneric; im ... -
TestMap 【007】
2009-04-27 12:32 728package com.testmap; import ... -
Test Collections 【006】
2009-04-26 18:26 710package com.testcollecton; i ... -
List 【005】
2009-04-26 13:26 667package com.list import java ... -
Collection_Set 【004】
2009-04-26 01:25 697package com.testset; import ... -
Enhanced For 【003】
2009-04-25 16:04 643package com.testenhanced; im ...
相关推荐
简要叙述什么是访问控制符,列出Java中的访问控制符,并说明各个访问控制符的控制权限
AS3.0中访问控制符:public、private、protected和internal的区别
java语言与面向对象设计PPT,讲解的很是详细,很适合初级学员仔细拜读,里面还有很多随堂练习题
java的访问控制符分为两类:类的访问控制符,属性和方法的访问控制符。 1. 类的访问控制符有两种:public, default(默认的,什么都不用写) default是包内访问控制符。 当然对于内部类还可以有static修饰,...
实验目的 理解掌握Java类修饰符、访问控制符等;理解熟悉String类的equals方法和= =运算符;进一步熟悉面向对象基本概念;熟悉Java中对象声明、创建、访问、参数传值等基本语法;
java的控制符可分为两大类,一种是访问控制符,另一种是非访问控制符。我们上文提到的public,private便是访问控制符了。 访问控制符:访问控制符的作用是说明被声明的内容(类、属性、方法和构造方法)的访问权限 ...
13_访问控制符_2 视频文件(javase)
12_访问控制符_1 视频文件(javase)
文章目录前言特性中的继承访问控制符成员访问控制符private默认protectedpublic类的访问控制符非访问控制符static静态域静态方法finalfinal类final方法final字段和局部变量main()方法 你好,我是goldsun。 你有想法...
)封装的特点: 主要讲述封装与暴露 2)访问控制符 主要讲述private、不写、protected、public 3)指定原则:
上章讲了访问控制符,这章开始讲非访问控制符。 java中的非访问修饰符的作用各不一样,据我所知常用的有六种: static final abstract synchronized volatile transient 今天我们只讲前三种,后面三种等我们讲到线程...
2.3.2 Java访问控制符;2.3.2 Java访问控制符;2.3.2 Java访问控制符;2.3.2 Java访问控制符;2.3.2 Java访问控制符;2.3.3 学生实践练习;2.3.3 学生实践练习;2.4 static关键字;2.4 static关键字;2.4.1 静态成员变量;...
NULL 博文链接:https://tonysmith.iteye.com/blog/1431942
编写四个类A、B、C、D,其中类A、B在同一个包中,类C、D在另一个包中,且类C为类A的子类,通过这四个类来测试private,protected,public和friendly四个访问权限的区别。实现栈的基本操作。实现计算器。
10.1.1 饭前水果:实例变量的访问控制符 237 10.1.2 一切还是从汽车开始 238 10.1.3 一类车,一个类 241 10.1.4 分开也有麻烦 244 10.1.5 使用继承——问题迎刃而解 245 10.1.6 使用Bus类 248 10.1.7 Java中的...
10.1.1 饭前水果:实例变量的访问控制符 237 10.1.2 一切还是从汽车开始 238 10.1.3 一类车,一个类 241 10.1.4 分开也有麻烦 244 10.1.5 使用继承——问题迎刃而解 245 10.1.6 使用Bus类 248 10.1.7 Java中的...
封装是Java面向对象的三大特征之一(另外的两个特征为多态和继承),封装指的是将对象的状态信息隐藏在对象内部,从外面是看不出来的,当然也不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来...
•局部内部类不能在外部类以外的地方使用,那么局部内部类也不能使用访问控制符和static修饰 匿名内部类 •匿名内部类适合创建那种只需要一次使用的类,定义匿名内部类的语法格式如下: •new 父类构造器...
一、实验目的 1. 通过编制一个独立应用程序,使得学生掌握Java的系统所提供类的引用方法;...3. 掌握类及其成员的访问控制符,static等修饰符的用法。 4. 掌握类中各种变量的作用范围。 5. 掌握方法的重载。
实例变量的作用域至少在本类内部,受访问控制符的限制。 在重合作用域,实例变量和局部变量允许有命名冲突,“局部优先”。 定义方法: 格式: [ 修饰符 ] 返回类型 方法名( 参数列表 ) [ throws ...