包及其导入

36 阅读3分钟

前面我们学习了Scala中面向对象的相关知识,下面我们开始如何组织文件代码。👇

一,包的概念

Scala中的包可以定义在文件的开头,也可以在代码的任意位置。 作用: 区分同名的类; 类很多时,更好地管理类;控制访问范围;

二,包的创建基本使用

基本步骤:创建包 → 创建对象(类) → 导入类

示例:

1. 创建包。右键,新建软件包。名称小写。

2. 在包上右键,新建类

3. 在测试文件中引入类,使用。 1.png  2.png

3.png

三,包的定义格式

定义格式1: package 包名

定义格式2: package 包名 {}

定义格式3: package 包名{ package 包名  }

[注意]   一个惯例是将包命名为与包含 Scala 文件的目录名相同。

包名称应全部为小写 ,只能包含数字,字母,下划线,小圆点。不能使用数字开头,也不要用关键字。**

例如:

package demo.class.exec1 // 错误,因为class是关键字

package demo.12a // 错误,数字开头

提示:三个默认导入 import java.lang._ ; import scala._ ; import scala.Predef._

两种包的管理风格:

风格1:将包名与包含scala文件的目录名相同

风格2:嵌套package表示层级关系

四,导入包

Scala的导入语法:在Scala中显式导入包使用import关键字。

(1)import 包名  导入这个包下的顶层对象

(2)通配符导入: import 包名._ 导入这个包下所有的类

(3)import 包名.类名 导入这个包下的具体的类

(4)导入相同包的多个类:import java.util.{HashSet, ArrayList }

(5)导入成员重命名。如果在一个类中需要导入不同包中的成员且成员名相同,可以通过导入成员重命名的方式区分不同包中的成员,其语法格式为:

import java.util.{ArrayList=>JL} 表示把util包中的ArrayList类重命名为JL。

(6)局部导入:什么时候用,什么时候import。在其作用范围内部都可以使用。

(7)导入成员隐藏类。如果一个包中包含多个类,除包中某一个类之外都需要导入,可以使用导入成员隐藏类的方法,其语法格式为:把包中的A不导入。import 包.{A=>_ , _}

4.png

5.png

1,导入多个类

package tooltest

// import tools.{ A,B,C}
import tools._


// 1, import 导入一个类, 包名,类名

// 2,import 导入多个类 包名,{ 类名1,类名2}

// 3, import 导入包下边的所有类

// import tools.A
// import tools.B

object main {
  def main(args: Array[String]): Unit = {
    new A()
    new B()
    new C()
  }

}

8.png 7.png

2.包内重命名

package tooltest

// import tools.{ A,B,C}

// import tools._


// 1, import 导入一个类, 包名,类名

// 2,import 导入多个类 包名,{ 类名1,类名2}

// 3, import 导入包下边的所有类

// 4,如果导入的一个类,与现有的类名有冲突? 包名.{类名 => 新名字}
// 导入类的时候,可以改下名字-重命名

import tools.{C => C1}

// import tools.A
// import tools.B
class C() {
  println("C")
}
object main {
  def main(args: Array[String]): Unit = {
    new C1()
    new C()
  }

}

9.png

五,定义包的对象

包对象是通过将其置于包的定义内部来创建的。例如,假设我们有一个包 com.example,我们可以在该包中创建一个包对象。

[格式]package object 包名 {}

使用
1,在同一个包下的类(对象中)直接访问;

2,在子包下,通过包名.成员的方法访问

[例] 在 src/main/scala/com/example/package.scala  

package com.example  

package object mypackage {  

  val greeting: String = "Hello from package object!"  

  def greet(name: String): String = {  

    s"$greeting, $name!"  

  }  
}

在这个示例中,我们定义了一个包对象 mypackage,其中包含一个常量 greeting 和一个方法 greet。

使用包对象:

包对象中的成员可以被同一个包中的任何代码所访问。不需要导入包对象,因为成员在包的命名空间中可用。

以下是一个简单的使用示例:

在 src/main/scala/com/example/Main.scala  

package com.example  

object Main {  

  def main(args: Array[String]): Unit = {  

    // 直接使用包对象中的成员  

    println(mypackage.greeting) // 输出: Hello from package object!  

    println(mypackage.greet("Alice")) // 输出: Hello from package object!, Alice!  

  }  
}