Scala-包

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

Java中的包

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

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

在Java中类的访问控制符只有public和default两种

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

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

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

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

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

是default的

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

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

 

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

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

 

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

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

 

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

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

 

综上所述:Java中类的访问控制符有public和default两种。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中进行测试,如下:

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

 

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

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

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

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

package cn.test;

public class ScalaFieldTest extends com.cnblog.CnlogPublicClass{

    public static void main(String[] args) {

    }
}

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

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

 

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

 

三、Java的引入-import

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

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

 

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

 

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

四.

时间: 2024-11-08 05:22:38

Scala-包的相关文章

Scala包和引用

1.包 Scala包的命名方式有两种.一种和Java一样,通过把package子句放在文件顶端的方式,把整个文件的内容放进包里.如: package scala.actors.Actor 另一种方式可以在package子句之后把要放到包里的定义用花括号括起来.如: package bobsrockets{ package navigation{ //在bobsrockets.navigation包中 class Navigator package tests{ //在bobsrockets.na

Scala包和引入

包 在Scala中,包的作用域和其他作用域一样地支持嵌套,在下一层作用域中可以访问上一层作用域中的名称. package com { package horstmann { object Utils { def percentOf(value: Double, rate: Double) = value * rate / 100 } package impatient { class Employee { def giveRaise(rate: scala.Double) { var salar

Scala包

#引入包的全部成员的办法 import scala.collection._ #引入同一个包中的几个成员 import scala.collection.{A,B} #重名 要 重命名 import scala.collection.mutable._ import java.util.{HashMap =>JavaHashMap} #或隐藏 import java.util.{HashMap=>_,空格_} #默认引入的包 import java.lang._ import scala._

Scala2.11.7学习笔记(七)Scala包介绍

欢迎访问:鲁春利的工作笔记,学习是一种信仰,让时间考验坚持的力量. 本文出自 "鲁春利的工作笔记" 博客,请务必保留此出处http://luchunli.blog.51cto.com/2368057/1705420

Scala学习(七)---包和引入

包和引入 摘要: 在本篇中,你将会了解到Scala中的包和引入语句是如何工作的.相比Java不论是包还是引入都更加符合常规,也更灵活一些.本篇的要点包括: 1. 包也可以像内部类那样嵌套 2. 包路径不是绝对路径 3. 包声明链x.y.z并不自动将中间包x和x.y变成可见 4. 位于文件顶部不带花括号的包声明在整个文件范围内有效 5. 包对象可以持有函数和变量 6. 引入语句可以引入包.类和对象 7. 引入语句可以出现在任何位置 8. 引入语句可以重命名和隐藏特定成员 9. java.lang.

Scala详解---------包和引用

包和引入 摘要: 在本篇中,你将会了解到Scala中的包和引入语句是如何工作的.相比Java不论是包还是引入都更加符合常规,也更灵活一些.本篇的要点包括: 1. 包也可以像内部类那样嵌套 2. 包路径不是绝对路径 3. 包声明链x.y.z并不自动将中间包x和x.y变成可见 4. 位于文件顶部不带花括号的包声明在整个文件范围内有效 5. 包对象可以持有函数和变量 6. 引入语句可以引入包.类和对象 7. 引入语句可以出现在任何位置 8. 引入语句可以重命名和隐藏特定成员 9. java.lang.

快学Scala 第十课 (包和包对象)

Scala包定义: 嵌套式: package a1 { class a1Class{ val age = 10 } package a2 { class PackageTest { def main(args: Array[String]): Unit = { println(new a1Class().age) } } } } 串联式: package com.citi.packageUtil 包对象: 包对象被编译成带有静态方法和字段的JVM类,名为package.class,位于相应的包下

Scala基础05:包与引用

Scala通过不同的包能使用很多类型的表达式,而包的引入在Scala中相当灵活.包是用来管理名称的. 包的定义 在文件顶部,使用package定义包,与java一样. package cn.sjq.scala 嵌套形式的包定义: package com{ package horstmann{ package impatient{ class Employee{ // ... } } } } Scala的这种写包的方法使用的并不多.Scala写的Play框架使用的较多. 与对象和类的定义不同,同一

Scala基础语法(声明定义、标识符命名、Scala脚本入门)

一.声明与定义(赋值) 1.val, 常量声明   val x:T val x:T=e 2.var, 变量声明   var x:T var x:T=e ?类型省略(默认类型)val x=e var x=e ? 声明省略(连续声明) val x1,x2,x3 等价于 val x1;val x2; var x1,x2,x3:T=e  等价于  var xn:T=e 3.def,函数声明def abc(xn:T):T*=e def adder(m:Int,n:Int) =m+n def adder()

scala学习手记8 - 自适应的默认做法

scala有一些默认做法,会让代码更简洁.更易读写,下面列出了这样几个特性: 1. 支持脚本.scala支持脚本,因此无须将所有的代码都放到类里.如果脚本可以满足需求,就将代码放到一个脚本里,无须再创建一个冗余的类. 2. return是可选的.如果没有写return关键字,方法调用会自动返回最后一个求值的表达式--如果它符合方法声明的返回值类型. 3. 分号":"是可选的.不必在每个语句的后面都写上分号,这样会使代码更简洁.如果语句太长或者包含多行的话可以换行继续写,scala能够识