首页 > 代码库 > Scala-包

Scala-包

注:本文主要参考自《快学Scala》

Java中的包

在讲这个问题之前,有必要先了解一下Java里面的类和成员变量的访问控制符(本人也有点模糊,顺便复习下)

一.首先说下Java中类的访问控制符:

在Java中类的访问控制符只有publicdefault两种

image

public访问控制符修饰的类,可以在所有地方访问(包括当前包,当前包的子包,父包,其他包)

default访问控制符修饰的类,只能在当前包中访问,即便在子包、父包中也不能访问,其他包更不能访问

上述只是结论,下面证明,使用的项目的包结构如下

image

我们在com.cnblog.scala.test的各级包目录下新建两个类,其中一个类是public访问控制符,另一个类是default访问控制符

命名规则是:当前包的层级+public/default+Class,如com包下面的ComPublicClass.java是public的,ComDefaultClass

default

我们首先在com.cnblog.Main.java中查看其对当前包下的类的访问权限

image

从上图可以看出public和default的类访问控制符在当前包都是可见的

 

接下来我们测试publicdefault的类访问控制符对父包限制,我们的做法是在com.ScalaPublicClass.java中进行测试

image

从上图可以看出父包看不到子包下default访问控制符修饰的类文件,可以看到public修饰的类文件

 

我们再测试publicdefault的类文件在子包中的可见性,做法是在com.cnblog.scala.ScalaPublicClass.java中进行测试

image

通过上图可以看出子包中可以看到父包中的public修饰的类文件,看不到default修饰的类文件

 

最后我们测试public和default修饰的类文件在其他非子包、父包的类中的可见性,我们的做法是在cn.test.Main中进行测试

image

从上图可以看出,在一个包中可以看到其他包的public修饰的类文件,看不到default修饰的类文件

 

综上所述:Java中类的访问控制符有publicdefault两种。public的访问控制符修饰的类可以在任何地方访问,default修饰

的类只能在当前包自身的类中访问,子包、父包、其他包都不能访问

 

二.JAVA中成员的访问控制

这里只测试变量的访问控制,方法类比即可

在com.cnblog.CnlogPublicClass.java类中添加如下代码

package com.cnblog;@SuppressWarnings("all")public class CnlogPublicClass {    public static String strPublic = "static";    private static String strPrivate = "private";    protected static String strProtected = "";    static String strDefault = "default";        public static void main(String[] args) {            }}

性子急的可以直接看结论:

public修饰的成员:在所有地方可见

private修饰的成员:仅在当前类中可见

protected修饰的成员:在当前包(不包含子包和父包)和子类中可见

default:在当前包可见

下面测试:

首先测试当前包下面的类对其他类的成员的可见性,我们在com.cnblog.Main.java中进行测试,如下:

image

如图可知,一个类的成员对当前包下的其他类的可见性为:default,protected,public的成员可以看到,private看不到

 

然后测试对子包的可见性,测试方法是在com.cnblog.scala.ScalaPublicClass.java中进行测试

image

上图可以看到,子包对父包的类成员的可见性为:只能看到public的类成员

父包的表现跟子包一样,不再测试。

最后测试子类对父类的成员的可见性,做法是新建一个类,该类继承自com.cnblog.CnlogPublicClass如下

package cn.test;public class ScalaFieldTest extends com.cnblog.CnlogPublicClass{       public static void main(String[] args) {            }}

在该类中输入代码,查看结果

image

上图可以看出,子类可以看到父类的publicprotected的成员,看不到default(在同一包下可以)和private成员

 

归纳上述实验,就得出入上结论,这里不再赘述。

 

三、Java的引入-import

Java中的导入都是针对类来说的。

image

import com.*的意思只是说导入com包下的所有类,没有把“com”包也导入的意思,如有能导入com包,第三行就不会报错了

 

Java中的支持静态导入-导入一个类的所有静态成员

image

 

-----------------------------------------------------------------------------------------------------------------------------------

四.

Scala-包