java中包的访问
  sAAkk3Vxfaa8 2023年11月02日 43 0


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的了,没有想到。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
sAAkk3Vxfaa8