java中的tom_java中的封装() - tomzhao2008的个人空间 - OSCHINA - 中文开源技术交流社区...

最近又开始看Think in java了,^^

一.类的"封装"与访问权限

java中类一般都是"封装"到package中,然后再由各个package组合在一起打包成jar包,如果一个名为parent的package中有一个java文件(.java),那么这个文件一般有且只有一个public 修饰的类,该类名必须和文件名一致,也可以有其它额外的类,但只有public修饰的类可以被parent包外访问,其它的类一般用作为public 提供支持,下面是个例子。

//son包下的Cookie类定义了一个拥有包访问权限的bite函数

package packaging.son;

import packaging.Util;

public class Cookie {

public Cookie(){

Util.print("Cookie的构造函数");

}

void bite(){

Util.print("bite");

}

protected void bite2(){

Util.print("bite2");

}

}

class Cream{

}

在上面的类中定义了一个Cream的非公开类

//调用son包中cookie类的具有包访问权限的bite函数,会出错

package packaging;

import packaging.son.Cookie;

public class Dinner {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Cookie cookie=new Cookie();

//Cream c=new Cream();

//cookie.bite();

}

}

在测试程序里生成Cream对象时会出错,Dinner类所在包为packaging,因为在Dinner中只能使用被public 修饰的cookie类

编译器在碰到import语句时,首先会从CLASSPATH中查找,查找子目录为packaging/son/中所对应的变异后的.class文件

二.单例模式

如果一个类的构造函数的访问权限为private,那么这个类将不会被实例化,除非在这个类的static成员里,单例模式就是这样的

package packaging;

public class Singleton {

private static Singleton singleton=new Singleton();

private Singleton(){}

public static Singleton getObject(){

return singleton;

}

public void test(){

Util.print("test");

}

public static void main(String[] args){

Singleton.getObject().test();

}

}

上面的类就是一个单例模式,其中加了一个测试的程序

二.类成员的访问权限

类成员的访问权限有4个,private,protected,package,public四种,其中private和public用的最多,package主要在同一包内可访问,如前面的代码,在son包中定义的Cookie类的成员方法bite是包访问权限的,而Dinner与Cookie不在同一个包中,所以无法访问Cookie中bite,protected用于继承,先看个例子

import packaging.son.Cookie;

public class ChocolateChip extends Cookie{

public ChocolateChip(){

Util.print("Chocolate构造函数");

}

public void chomp(){

//bite();

}

public void chomp2(){

bite2();

}

public static void main(String[] args) {

ChocolateChip c=new ChocolateChip();

c.chomp();

c.chomp2();

}

}

packageing包中的ChocolateChip类继承了其子包son中的类Cookie,Cookie中的拥有包访问权限的bite方法却不能在子类中可见,父类中随后的具有protected 访问权限的bite2方法可以被子类继承使用

同包之间的类具有包访问权限的方法可以访问

//定义f函数的访问权限为包访问权限

package packaging;

public class Pie {

void f(){

Util.print("Pie.f()");

}

}

//由于和Pie类在同一个包中,Cake可以访问到Pie类中具有包访问权限的函数的f

package packaging;

public class Cake {

public static void main(String[] args) {

Pie pie=new Pie();

pie.f();

}

}

可以看到在Cake中可以访问到pie中具有包访问权限的方法f

综上可得:

1.同一包中的具有package及其以上访问权限的成员,可以被访问

2.在继承中,父子类不在同一包中,可以通过protected进行继承

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值