【安卓学习笔记】JAVA基础lesson11-包和访问权限
发布日期:2021-05-07 20:17:08 浏览次数:25 分类:精选文章

本文共 3240 字,大约阅读时间需要 10 分钟。

关键字package及其使用方法

package关键字可以将一个类放在一个包里面。使用的方法是package+包名
如 
package urien;class Lesson11A{	void Lesson11A(){		System.out.println("this is Lesson11A");	}	public static void main(String args []){		System.out.println("this is the main func");	}}
在编译上与之前的方法有点区别。
没有包的情况下:javac xxx.java
有包的情况下:
javac -d (路径) xxx.java
一个个词的来解释:
javac:java文件编译的命令
-d:根据包名来生成文件夹名
(路径):这个参数代表的在哪个目录下生成名字为包名的文件夹,只要是计算机里合法的路径都是可以的,还有就是用英文输入法的'.',这个代表在当前目录
xxx.java :这个不用多说,当然是只编译哪个java文件了
如果在命令后面加上了这个参数,在编译完成之后时候,所生成的类就会放在一个包名的文件夹里面;
如上述代码,生成的类会放在urien文件夹下,这个文件夹是编译器自动生成的。
编译后如下图所示:
类一旦打包之后,类名就会发生改变,类名改变为:
“包名”+“.”+“类名”
以上述代码生成的类为例:所生成的类为urien.Lesson11A.class,所以如果要直接调用的
需要时使用命令:
java urien.Lesson11A
执行结果如下
D:\Android\src>java urien.Lesson11Athis is the main funcD:\Android\src>
在这里需要注意的是,这里包名变化并不是简单的类的路径变了,可以通过以下方式测试出来:
如上图,先把路径定位到包名的文件家里面,在这个文件夹的确能看到Lesson11A的类文件,但是直接用java执行是通不过的,这就验证了上述的说法;
包名的命名规范:
1.包名的字母一般都是小写
2.报名一般情况下是域名倒写(如域名是:ABC.com,则报名就是com.ABC)

3.包名如果含有".",那么就会生成子目录。

如包名com.ABC,则生成的类文件存储在com文件夹里面的ABC文件夹里。有多少个“.”,就有多少级目录,以此类推。

/*********************************************华丽分割线**********************************************/
访问权限主要分有:
1.公共权限
public
2.私有权限
private
3.默认权限(包级别)
default
4.受保护权限
protected
public :可以修饰类,成员变量和成员函数
public在修饰类的时候需要注意:
语法规定public所修饰的类的类名需要跟类所在的java文件名保持一致,如果没有则在编译的时候就会报错;
public所修饰的类的好处是在于:不在一个包的另一个类如果可以直接通过报名调用公共类;
如:
package urienA;public class Lesson11A{	public String str;	public int num;		public void func(){		System.out.println("this is Lesson11A");	}}package urienB;class Lesson11B{	urienA.Lesson11A A = new urienA.Lesson11A();}
同样的,对于成员变量和成员函数也是一样的,如果有两个类,一个类想访问另一个类的成员变量和成员年函数,不在一个包,是没有权限访问的。
换一种说法:在不不同的包中,一个类想要访问另一个类的话,要求被访问的类有public权限,要想访问成员变量和成员函数时,也需要成员变来那个和成员函数有public权限。
private权限:
使用方法同public一样 在变量和函数前加private关键字修饰非特殊情况下只能修饰成员变量和成员函数;被private关键字修饰过的成员变量和成员函数,只能在当前的类中使用,在类的外部不论包是否相同都无法使用。
default权限:
使用default权限修饰,无需加任何关键字修饰,在相同的包当中可以任意访问,不在一个包内无法访问;
protected权限:
拥有和default一样公能,但是protected只能修饰变量和函数。同时如果在父类里面用protected修饰的变量和函数,是允许继承的子类跨包使用的。
这里再特记一下:
如果有以下类:
public class Lesson11A{	public String str;	protected int num;		public void func(){		System.out.println("this is Lesson11A");	}	}
这里有
public String str;
protected int num;
两个成员变量。其中str是public类型,num是protected类型,这两个在权限上的区别是public是公共的,其他的类只要访问了这个类,这个变量就可以使用;protected修饰的成员变量和函数只有继承的子类才能访问;
/*********************************************华丽分割线**********************************************/
包的导入
如:
package urienA;public class Lesson11A{	public String str;	public int num;		public void func(){		System.out.println("this is Lesson11A");	}	}package urienB;class Lesson11B{	urienA.Lesson11A A = new urienA.Lesson11A();}

在包urienA和urienB中的两个类Lesson11A和Lesson11B,在Lesson11A是公共类的前提下,如果类Lesson11B想要访问类Lesson11A除了使用

urienA.Lesson11A A = new urienA.Lesson11A();//包名加类名的方法

还可以使用包的导入方法:

package urienB;import urienA.Lesson11Aclass Lesson11B{	Lesson11A A = new Lesson11A();}
这里的import urienA.Lesson11A就是奖包urienA中的Lesson11A导入的意思;

当然也可以使用多条import1️以导入不同的类,再有就是一个更简单的方法,用 
import urienA.* 可以把包urienA里面的类都导入进来;导入进来后就可以不用写包名,直接写类名就可以了
访问权限与继承
在类的继承关系中也同样遵从以上规则;
子类和父类如果不在同一个包当中,首先父类必须公共的才能跨包被继承,同时,父类里面拥有的成员变量和成员函数如果需要被子类继承,也是需要被修成成public公共才能使用的;
如果父类的变量和函数定义成了private(私有)的,子类也是无法使用的。
总结:

在编写代码的时候最好是把成员变量和成员函数的权限定义到最小,这样才能体现出来面向对象的封装性;

By Urien 2017年8月31日 21:27:13

上一篇:【安卓学习笔记】JAVA基础Lesson12-接口
下一篇:【安卓学习笔记】JAVA基础Lesson10-抽象类和抽象函数

发表评论

最新留言

很好
[***.229.124.182]2025年04月06日 23时51分46秒