Scala(自学-5)

目录

六、面向对象编程

a、Scala包

b、Scala类


 

六、面向对象编程

a、Scala包

  1. 基本语法:package 包名
  2. Scala包的三大作用(和java一样)
    1. 区分相同名字的类
    2. 当类很多时,可以很好的管理类
    3. 控制访问范围
  3. 包的命名
    1. 命名规则:只能包含数字、字母、下划线、小圆点.,但不能用数字开头,也不要使用关键字。
    2. 命名规范:一般是小写字母+小圆点
  4. 包说明(包语句)
    1. Scala 有两种包的管理风格,一种方式和 Java 的包管理风格相同,每个源文件一个包(包 名和源文件所在路径不要求必须一致),包名用“.”进行分隔以表示包的层级关系,如 com.atguigu.scala。另一种风格,通过嵌套的风格表示层级关系,如下
      package com{
      package atguigu{
      package scala{
      }
      }
      }
      

       

    2.  一个源文件中可以声明多个 package、子包中的类可以直接访问父包中的内容,而无需导包
  5. 包对象
    1. 说明:在 Scala 中可以为每个包定义一个同名的包对象,定义在包对象中的成员,作为其对 应包下所有 class 和 object 的共享变量,可以被直接访问。
    2. 若使用 Java 的包管理风格,则包对象一般定义在其对应包下的 package.scala 文件中,包对象名与包名保持一致。
    3. 如采用嵌套方式管理包,则包对象可与包定义在同一文件中,但是要保证包对象 与包声明在同一作用域中。
  6. 导包说明
    1. 和 Java 一样,可以在顶部使用 import 导入,在这个文件中的所有类都可以使用。
    2. 局部导入:什么时候使用,什么时候导入。在其作用范围内都可以使用
    3. 通配符导入:import java.util._
    4. 给类起名:import java.util.{ArrayList=>JL}
    5. 导入相同包的多个类:import java.util.{HashSet, ArrayList}
    6. 屏蔽类:import java.util.{ArrayList =>_,_}

b、Scala类

可以将类理解为用来创建对象的蓝图或模板。定义好类以后,就可以用new关键字类创建对象。

  1. 类的定义

    Scala的类用关键字class声明。最简单的类定义形式是:

    class Counter{

    //这里定义类的字段和方法

    }

    其中,Counter是类名,Scala中建议类名都用大写字母开头。在类的定义中,字段和方法统称为类的成员,其中字段是指对象所包含的变量,它保存了对象的状态或者数据,而方法是使用这些数据对对象进行各种操作可执行程序块。Scala中建议字段名和成员名都采用小写字母开头。字段的定义和变量的定义一样,用val和var进行定义,方法用关键字def定义。基本的语法为:

    def 方法名(参数列表):返回的结果类型 = {方法体}
    例如:(完整的类定义)
    class Counter {
        var value = 0
        def cc(step:Int):Unit = {println("Scala" + step)}
        def cc2():Int = {value}
    
    }

    在上面的类定义中,包括一个字段value和两个方法。其中方法cc接受一个Int型的参数,返回值为Unit;方法cc2没有参数,返回一个Int型的值。与java不同的是,在Scala的方法中不需要依靠return语句来为方法返回一个值;对与Scala而言,方法里面最后一个表达式的值就是方法的返回值。有了类的定义,就可以使用new关键字类进行实例化,并通过实例化对象的成员进行访问。例如:

    val myCounter = new Counter
    myCouter.value = 5 //访问字段
    myCouter.add(3) //调用方法
    println(myCouter.current) //调用无参数方法时,可以省略方法名后面的()

    Scala允许类的嵌套定义,即在一个类定义体里在定义另外一个类。

    class Cc(name:String,subname:String){//顶层类
        case class Ncc(name:String)//嵌套类
        def show{
            val c = new Ncc(subname)
            println(s"xm $name includes a Nested $c.name")
        }
    }
    val t = new Cc("A","B")
    t.show

     

  2. 类成员的可见性 

在Scala类中,所有成员的默认可见性为公有,且不需要用public关键字进行限定,任何作用域内都能直接访问公有成员。除了默认的公有可见性,Scala也提供与java类似的可见性选项包括private和protected,其中,private成员只对本类型和嵌套类型可见;protected成员对本类型和其他类型都可见。

Scala不推荐将字段的可见性设置为默认的公有,而建议将其设置为private,这是为了实现对这些私有字段的访问,Scala采用类型java中的getter和setter方法,定义了两个成对的方法value和value_=,其中value是需要暴露字段名字。例如,对于前面定义的Counter类,为了避免直接暴露公有字段value,可以进行重写。

class Counter{
    private var privateValue = 0
    def value = privateValue
    def value_ = (newValue: Int){
        if(newValue > 0 ) privateValue = newValue
    }
    def increment(step: Int): Unit = (value += step)
        def curret():Int = {value}
}

 上面定义了一个私有字段privateValue,该字段不能直接从外部访问,而是通过方法value和value_对外进行访问和修改,相当于Java中的getter和setter方法。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值