Scala的面向对象
Scala 的面向对象思想和 Java 的面向对象思想和概念是一致的。
Scala 中语法和 Java 不同,补充了更多的功能。
1.Scala包
Scala包与Java类似,有两种管理方式。第一种与Java一毛一样。
但是在Scala中,还有另一种,即通过嵌套的方式。
package com{
package zc{
package hadoop{
}
}
}
按照嵌套的方式:
(1)一个源文件中可以声明多个 package
(2)子包中的类可以直接访问父包中的内容,而无需导包,父包访问子包需要导包。
1.1Scala中的包对象
在 Scala 中可以为每个包定义一个同名的包对象,定义在包对象中的成员,作为其对应包下所有 class 和 object 的共享变量,可以被直接访问。类似于class的伴生对象。
package object Chap02 {
//定义当前包共享的属性和方法
val commonValue = "zc"
def commonMethod()={
println(commonValue+"在学习")
}
}
1.2导包
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 =>_,_}
7)导入包的绝对路径:new _root_.java.util.HashMap
注意:Scala 中的三个默认导入分别是 import java.lang._ import scala._ import scala.Predef._
2.Scala 类
在Scala中,没有public(即默认就是 public)
其次,一个Scala源文件可以包含多个类
类的属性(封装)都在下面实现:
object Test1BeanClass {
def main(args: Array[String]): Unit = {
val student = new Student
student.setAge(1)
student.setSex("ada")
println(student)
}
}
/* 修饰符默认public*/class Student{
private var name :String = _
//使用 _ 就是默认为该类型的空值
//在Scala中@BeanProperty我们可以直接获取getset方法
//但是此时使用@ 的话,我们需要其是private ,那么就很离谱 设计来干嘛。。
//Scala 中的 public 属性,底层实际为 private,并通过 get 方法(obj.field())和 set 方法
//(obj.field_=(value))对其进行操作。所以 Scala 并不推荐将属性设为 private,再为其设置
//public 的 get 和 set 方法的做法。但由于很多 Java 框架都利用反射调用 getXXX 和 setXXX 方
//法,有时候为了和这些框架兼容,也会为 Scala 的属性设置 getXXX 和 setXXX 方法(通过
//@BeanProperty 注解实现)。
@BeanProperty
var age:Int= _
@BeanProperty
var sex:String= _
override def toString = name+"