Scala 面向對象(二):package 包 (一) 入門


1 Scala包的基本介紹

和Java一樣,Scala中管理項目可以使用包,但Scala中的包的功能更加強大,使用也相對復雜些,下面我們學習Scala包的使用和注意事項。

2 Scala包快速入門

使用打包技術來解決上面的問題,不同包下Dog類

package com.atguigu.chapter02.xh
class Cat {
}
package com.atguigu.chapter02.xm
class Cat {
}
var cat1 = new com.atguigu.chapter02.xh.Cat()
println("cat1" + cat1)
var cat2 = new com.atguigu.chapter02.xm.Cat()
println("cat2" + cat2)

3 Scala包的特點概述

基本語法

package 包名

Scala包的三大作用(和Java一樣)

1) 區分相同名字的類 2) 當類很多時,可以很好的管理類 3) 控制訪問范圍

Scala中包名源碼所在的系統文件目錄結構要可以不一致,但是編譯后的字節碼文件路徑和包名會保持一致(這個工作由編譯器完成)

4 Scala包的命名

命名規則

只能包含數字、字母、下划線、小圓點.,但不能用數字開頭, 也不要使用關鍵字。 demo.class.exec1 //錯誤 , 因為class是關鍵字 demo.12a // 錯誤,因為不能以數字開頭

命名規范:

一般是小寫字母+小圓點一般是 com.公司名.項目名.業務模塊名

比如:com.atguigu.oa.model

com.atguigu.oa.controller

com.sina.edu.user com.sohu.bank.order

5 Scala會自動引入的常用包

java.lang.*

scala包

Predef包

 

   

 

 

Scala包注意事項和使用細節

 1)scala進行package 打包時,可以有如下形式。

 

 2)包也可以像嵌套類那樣嵌套使用(包中有包), 這個在前面的第三種打包方式已經講過了,在使用第三種方式時的好處是:程序員可以在同一個文件中,將類(class / object)、trait 創建在不同的包中,這樣就非常靈活了。

 

 3)作用域原則:可以直接向上訪問。即: Scala中子包中直接訪問父包中的內容, 大括號體現作用域。(提示:Java中子包使用父包的類,需要import)。在子包和父包 類重名時,默認采用就近原則,如果希望指定使用某個類,則帶上包名即可。

package com.atguigu{
  //這個類就是在com.atguigu包下
  class User{
  }
  //這個類對象就是在Monster$ , 也在com.atguigu包下
  object Monster {
  }
  class Dog {
  }
  package scala {
    //這個類就是在com.atguigu.scala包下
    class User{
    }
    //這個Test 類對象
    object Test {
      def main(args: Array[String]): Unit = {
          //子類可以直接訪問父類的內容
          var dog = new Dog()
          println("dog=" + dog)
          //在子包和父包 類重名時,默認采用就近原則.
          var u = new User()
          println("u=" + u)
          //在子包和父包 類重名時,如果希望指定使用某個類,則帶上包路徑
          var u2 = new com.atguigu.User()
          println("u2=" + u2)
      }
    }
  }
}

4) 父包要訪問子包的內容時,需要import對應的類等

package com.atguigu{
  //引入在com.atguigu 包中希望使用到子包的類Tiger,因此需要引入.
  import com.atguigu.scala.Tiger
  //這個類就是在com.atguigu包下
  class User{
  }
  package scala {
    //Tiger 在 com.atguigu.scala 包中
    class Tiger {}}
  object Test2 {
    def main(args: Array[String]): Unit = {
        //如果要在父包使用到子包的類,需要import
        val tiger = new Tiger()
        println("tiger=" + tiger)
    }}}

5)可以在同一個.scala文件中,聲明多個並列的package(建議嵌套的pakage不要超過3層)

6)包名可以相對也可以絕對,比如,訪問BeanProperty的絕對路徑是: _root_. scala.beans.BeanProperty ,在一般情況下:我們使用相對路徑來引入包,只有當包名沖突時,使用絕對路徑來處理。

package com.atguigu.scala2
class Manager( var name : String ) {
  //第一種形式
  //@BeanProperty var age: Int = _
  //第二種形式, 和第一種一樣,都是相對路徑引入
  //@scala.beans.BeanProperty var age: Int = _
  //第三種形式, 是絕對路徑引入,可以解決包名沖突
  @_root_. scala.beans.BeanProperty var age: Int = _
}
object TestBean {
  def main(args: Array[String]): Unit = {
    val m = new Manager("jack")
    println("m=" + m)
  }}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM