java中包的访问

Java中有三种修饰符:public、protected、private。实际上还隐藏着一个缺省的包。

public:定义了类型的主要功能。

protected:定义了子类可获得的用于特化目的的功能。

private:定义仅仅此类的特定功能。

package(缺省):定义了包内其他代码可获得的用来实现包类型之间协作的功能。

 

例子:

package P1;
public abstract class AbstractBase {
	public AbstractBase() {
		System.out.println("\nCreate Object : " + getClass());
	}
	private 	void pri() {System.out.println("AbstractBase.pri()");}
				void pac() {System.out.println("AbstractBase.pac()");}
	protected 	void pro() {System.out.println("AbstractBase.pro()");}
	public	 	void pub() {System.out.println("AbstractBase.pub()");}
	public final void show() {
		pri();
		pac();
		pro();
		pub();
	}
}

 

 

package P2;
import P1.AbstractBase;
public class Concrete1 extends AbstractBase {
	public 	void pri() {System.out.println("Concrete1.pri()");}
	public	void pac() {System.out.println("Concrete1.pac()");}
	public 	void pro() {System.out.println("Concrete1.pro()");}
	public 	void pub() {System.out.println("Concrete1.pub()");}
}

 

 

package P1;
import P2.Concrete1;
public class Concrete2 extends Concrete1 {
	public 	void pri() {System.out.println("Concrete2.pri()");}
	public	void pac() {System.out.println("Concrete2.pac()");}
	public 	void pro() {System.out.println("Concrete2.pro()");}
	public 	void pub() {System.out.println("Concrete2.pub()");}
}

 

package P3;
import P1.Concrete2;
import P2.Concrete1;
public class Concrete3 extends Concrete2 {
	public 	void pri() {System.out.println("Concrete3.pri()");}
	public	void pac() {System.out.println("Concrete3.pac()");}
	public 	void pro() {System.out.println("Concrete3.pro()");}
	public 	void pub() {System.out.println("Concrete3.pub()");}
	
	public static void main(String[] args) {
		new Concrete1().show();
		new Concrete2().show();
		new Concrete3().show();
	}
}

 

 

四个类,三个包,AbstractBase和Concrete2在包P1中,Concrete1在P2中,Concrete3在P3中。

运行结果:

 

写道
Create Object : class P2.Concrete1
AbstractBase.pri()
AbstractBase.pac()
Concrete1.pro()
Concrete1.pub()

Create Object : class P1.Concrete2
AbstractBase.pri()
Concrete2.pac()
Concrete2.pro()
Concrete2.pub()

Create Object : class P3.Concrete3
AbstractBase.pri()
Concrete3.pac()
Concrete3.pro()
Concrete3.pub()

 

 

结果分析:

1,所有子类都不能看到private,那么private方法始终没有被覆盖。

2,protected和public都能够被子类覆盖。

3,默认的package的是最有意思的,Concrete1和AbstractBase不在同一包不能覆盖正常,Concrete2和AbstractBase在同一包能够覆盖也正常,Concrete3 和AbstractBase不在同一个包,居然因为Concrete2已经覆盖了pac的方法,把这个打开成了public的了,没有想到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值