• 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)

    }}

  • 相关阅读:
    Java泛型 PECS(Producer Extends, Consumer Super)
    JDK(七)JDK1.8源码分析【集合】TreeMap
    JDK(六)JDK1.8源码分析【集合】LinkedHashMap
    JDK(五)JDK1.8源码分析【集合】HashMap
    JDK(四)JDK1.8源码分析【排序】DualPivotQuicksort
    JDK(三)JDK1.8源码分析【排序】mergeSort
    JDK(二)JDK1.8源码分析【排序】timsort
    第24天多线程技术
    第23天功能流、图形化界面、多线程
    第二十二天 字符流、缓冲区、转换流
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309042.html
Copyright © 2020-2023  润新知