码迷,mamicode.com
首页 > 编程语言 > 详细

Java访问性与包的讲解

时间:2015-02-05 21:58:26      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:访问性      

一、Java中的访问控制

     1、private修饰词,表示成员是私有的,只有自身可以访问;   
     2、protected,表示受保护权限,体现在继承,即子类可以访问父类受保护成员,同时相同包内的其他类也可以访问protected成员。   
     3、无修饰词(默认),表示包访问权限(friendly, java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++ ),同一个包内可以访问,访问权限是包级访问权限;  
     4、public修饰词,表示成员是公开的,所有其他类都可以访问;

具体可见如下表:

                                表1-1J ava中的访问控制

可见/访问性 在同一类中 同一包中 不同包中  同一包子类中  不同包子类中 
 public  yes  yes  yes  yes  yes
 protected   yes  yes  no  yes yes
 package   yes  yes  no  yes   no
 private  yes  no  no  no  no

 注意: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访问性与包的讲解

标签:访问性      

原文地址:http://blog.csdn.net/evankaka/article/details/43536187

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!