Java访问性与包的讲解
来源:互联网 发布:魔兽中机械宠物矩阵 编辑:程序博客网 时间:2024/05/17 07:46
一、Java中的访问控制
1、private修饰词,表示成员是私有的,只有自身可以访问;
2、protected,表示受保护权限,体现在继承,即子类可以访问父类受保护成员,同时相同包内的其他类也可以访问protected成员。
3、无修饰词(默认),表示包访问权限(friendly, java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++ ),同一个包内可以访问,访问权限是包级访问权限;
4、public修饰词,表示成员是公开的,所有其他类都可以访问;
具体可见如下表:
注意:Java的访问控制是停留在编译层的,也就是它不会在.class文件中留下任何的痕迹,只在编译的时候进行访问控制的检查。其实,通过反射的手段,是可以访问任何包下任何类中的成员,例如,访问类的私有成员也是可能的。
补充说明:
(1)每个编译单元(类文件)都仅能有一个public class
(2)public class的名称(包含大小写)必须和其类文件同名。
(3)一个类文件(*.java)中可以不存在public class。
(4)如果我们在某个包内撰写一个class,仅仅是为了配合同一包内的其他类工作,并且我们不想再为了撰写说明文档给客户(不一定是现实意义的客户,可能是调用这个类的类)看而伤脑筋;或者有可能过一段时间之后会彻底改变 原有的做法,并以全新的版本代替旧版本,这种情况下一般会默认。
(5)class不可以是private和protected。
使用范例:
package com.visible.test;/** *基础类 */class Base{public int a;protected int b;private int c;int d;}/***继承类*/class Deprive extends Base{public void set(){a=1;b=2;//c=3;//出错d=4;}}public class Main {public static void main(String[] args) { Base m_Base=new Base(); m_Base.a =1; m_Base.b=2; // m_Base.c=3;//出错 m_Base.d=4; Deprive m_deprive=new Deprive(); m_deprive.set();}}
二 包
1、 包
包名一般为小写,而类名的第一个字母一般为大写,这样在引用时,可以明显的分辨出包名和类名。如果在类的定义之前没有使用package定义包名,那么该类就属于缺省的包。
2、Hello Package
首先通过一个简单的package的定义来学习package的使用:
package testPackage;public class Test{ public static void main(String args[]) { mNode node = new mNode(); node.print("hello"); }}
说明:
(1) 使用package关键字指明类所在的包;
(2) package语句必须在文件的最前面;
(3) 编译时可使用javac –d . Test.java自动产生包需要目录;
(4) 可以使用java testPackage.Test来执行编译后的代码;
3、 包的几个作用:
(1) 可以更好的组织类,包与文件夹类似,文件夹可以将不同的文件放在同一个文件夹中,而包也可以将不同的类文件放在同一包中;
(2) 减少类名的冲突问题,这也与文件夹类似,同一文件夹中的文件不能重名,不同文件中的文件可以重名,同一包中的类名不能重复,不同包中的类名可以重复;
(3) 对包中的类起了一定的保护作用,详见java的访问控制;
4、 import的使用
(1) 直接引用指定的类,如import java.util.Vector;
(2) 引用一个包中的多个类,如import java.awt.*。更确切的说,它并不是引用java.awt中的所有类,而只引用定义为public的类,并且只引用被代码引用的类,所以这种引用方法并不会降低程序的性能;
(3) *号代替类名,在不能代替包名,如import java.awt.*,只引用java.awt下的类,而不引用java.awt下的包;
(4) import java.awt.F*,这种使用方法是错误的;
(5) import语句在所有类定义之前,在package定义之后;
(6) import只告诉编译器及解释器哪里可以找到类、变量、方法的定义,而并没有将这些定义引入代码中;
5、包中类的使用
有以下几种机制可以使用包中的类:
(1) 如果要使用的类是属于java.lang包的,那么可以直接使用类名来引用指定的类,而不需要加上包名,因为包java.lang不用显示使用import,它是缺省引入的;
(2) 如果要使用的类在其它包(java.lang除外)中,那么可以通过包名加上类名来引用该类,如java.awt.Font
(3) 对于经常要使用的类(该类在其它包中),那么最好使用import引用指定的包,如java.awt.*
(4) 如果import引入的不同的包中包含有相同的类名,那么这些类的使用必须加上包名
(5) 接口也可以属于某个包,也可以使用import引入其它包中的类和接口
- Java访问性与包的讲解
- java中包与包之间的资源访问
- java 包与包之间访问
- JAVA基础6.65——包与包之间的访问及访问权限
- 黑马程序员---Java包的创建以及包与包之间的访问
- Java中的包与访问权限的控制
- Java中的包与访问权限的控制
- java包的概念、访问级别与重写规则
- Java 包与包之间的访问 (类在不同包里)
- java-包的访问权限
- Java基础-包讲解
- JAVA 包与包之间访问(package)
- JAVA 包与包之间访问(package)
- JAVA 包与包之间访问(package)
- protected与包访问权限的区别
- java面向对象-包package-包与包之间访问-导入包import
- java的包和访问控制层次
- java 访问包下的类
- Json_Ajax 页面交互双向传值
- 【算法】冒泡排序C语言实现
- webpy&apache&wsgi
- 杭电acm 1015
- 《设计模式之禅》——行为类模式大PK
- Java访问性与包的讲解
- 2015.02.05——张佳莉
- libjson编译和使用
- springMVC freemarker实现页面静态化
- 成功的家长必须知道的三十三句话
- codeforces 510D Fox And Jumping
- 【读书笔记】从现在开始就写博客
- USACO6.3.3 Cowcycles(cowcycle)
- HDU 3853 LOOPS(概率dp求期望啊)