Java & Groovy & Scala & Kotlin -

2017-09-24  本文已影响0人  bookislife

Overview

本章主要介绍各语言中的包和访问权限控制。

Java 篇

创建包

例:

package a.b;
class B {}

导入包

导入指定的类

import a.b.B;

导入指定包下的所有类

import a.b.*;

静态导入

static import a.b.B.*;

package-info

Java 中每个包都可以声明一个名为 package-info.java 的源文件。该源文件主要在生成文档时用于描述当前包的功能和作用,有时也可以用于定义仅在包中共享的静态变量和静态方法。

访问权限

Java 中访问权限分为四种:

注意: Java 并没有父包和子包的概念,即 a.b.ca.b 没有任何关系,也不存在访问控制权限的传递,所以 a.b.c 中定义的类无法访问 a.b 中的类定义的私有成员。

Groovy 篇

创建包与导入包均与 Java 相同。

访问权限

Groovy 中访问权限分为四种:

Groovy 中也没有父包和子包的概念。

Scala 篇

创建包

使用块声明包

package A {
  package B {
    class B {
    }
  }
}

此时 AA.B 包的成员对 class C 直接可见。

使用串联式包名

package A.B.C {
  class C {
  }
}

此时 AA.B 包的成员对 class C 并不直接可见。

使用顶部标记声明在源文件开头,对整个源文件有效

package A.B
package C

等同于

package A {
  package B {
    package C {}
  }
}

导入包

导入指定的类

import a.b.B

导入指定包下的所有类

import a.b._

使用选取器导入指定的类

import java.awt.{Color,Font}

使用选取器重命名选取的类

import java.util.{HashMap=>JavaHashMap}

包对象

package object Constants {
  val VERSION = "0.0.1"
}

访问权限

Scala 中 的访问权限比较复杂

Scala 包支持嵌套,即下层可以直接访问上层作用域的成员。但是如果使用了串联式包名,则必须手动引入对应的包才能正常使用。而在 Java 中不同包名没有任何直接关系。

Kotlin 篇

创建包

与 Java 相同。

导入包

与 Java 相同。但是 Kotlin 在导入包时可以指定别名。

指定别名

import foo.bar as b

val b = b()
b.bar()

默认包

如果一个 kotlin 源文件中没有任何包声明,则其当中的代码均属于默认包,导入时包名即为函数名

fun hello() {
    println("hello, Default Package")
}

import hello
hello()

访问权限

Kotlin 中访问权限分为四种:

模块是 Kotlin 的一个特殊的概念,表示的是一个单独的编译单元,概念类似Maven中的模块。

Summary


文章源码见 https://github.com/SidneyXu/JGSK 仓库的 _22_package 小节

上一篇 下一篇

猜你喜欢

热点阅读