【安卓学习笔记】JAVA基础lesson11-包和访问权限

xiaoxiao2021-02-28  48

关键字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.Lesson11A this is the main func D:\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.Lesson11A class Lesson11B{ Lesson11A A = new Lesson11A(); } 这里的import urienA.Lesson11A就是奖包urienA中的Lesson11A导入的意思;

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

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

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

转载请注明原文地址: https://www.6miu.com/read-57302.html

最新回复(0)