Scala编程数据结构

Kind:
Class:相当于java中的class,但是没有static修饰,里面的属性方法不是静态的
Object:里面的属性和方法都是静态的,可以直接调用
Trait:特质,相当于java中的接口,App就是特质

val和var
val:修饰的变量不可变,有getter方法,没有setter方法
var:修饰的变量可变,有getter方法,也有setter方法

package study3

class Dog {
  val id =10
  //可以用下划线作为一个临时替代,但是使用下划线作为临时替代,必须指定数据类型
  var name:String =_
  private val hobby = "shopping"
  def shout(contain:String):Unit={
    println(contain)
  }
}

class Cat{
}
class Animals{
}

object enter{
  def main(args: Array[String]): Unit = {
    val d =new Dog
    //如果没有给赋值,打印输出为null
    //println(d.name)
    d.name="zhangsan"
    println(d.name)
    d.shout("nihao!!")
    // . 可以省略
    d shout("wo去")
    println(d.id)
  }
}

JavaBeans规范定义了Java的属性是像getXXX()和setXXX()的方法。
创建一个Bean,使用@BeanProperty注解标识某个属性变量
通过getName、setName访问属性

package study3
import scala.beans.BeanProperty
class Person {

  @BeanProperty var num:Int=_
  val id = 11
  var name:String = _
  //private修饰的方法,只能在伴生类和伴生对象中进行调用
  private val hobby = "hobby"
  //private[this] 修饰的属性和方法只能在本类中使用
  private[this] val age =20

  def sayHello(): Unit ={
    println("Nice to meet you!")
  }
}

object Enter1{
  def main(args: Array[String]): Unit = {
    val person = new Person
    println(person.id)
    //name_=:这是scala中的setter方法 (第一种方式)
    //person.name_= ("wangwu")
    //第二种方式
    /*person.name="wangwu"
    println(person.name)*/

    person.setNum(111)
    println(person.getNum)

  }
}

主构造器和辅助构造器

  • 直接定义在类中的事主构造器,辅助构造器可有有任意多个,但是辅助构造器,首行必须调用主构造器或者其他辅助构造器.
  • Java中构造器赋值,是赋值在对象当中;scala中构造器赋值,是将所赋的值给到构造器去运行.
  • 构造器当中如果没有固定值,必须给赋值,如果构造器当中有默认值,可以选择赋值,如果不赋值,就会采用默认值.如果赋值则使用新赋值.
  • 构造器当中参数没有通过val或var修饰,相当于用private修饰.无法通过对象掉用属性,如果用val或var修饰,被修饰的参数提升为属性,通过对象就可以调用
package study3

//主构造器
class Student(var name:String,age:Int) {
  println(name)
  println(age)
  var color = "color"
//  println(color)
  //辅助构造器
  def this(name:String,age:Int,color:String){
    this(name,age)
    this.color = color
    println(color)
  }
}

运行
package study3
object Student_Enter {
  def main(args: Array[String]): Unit = {
    //调用了主构造器
//    val stu = new Student("lihua",18)
    //根据传参数的多少选择调用 主/辅助构造器
    val 流川枫 = new Student("流川枫",17,"red")
  }
}

伴生类和伴生对象

  • 一个文件中
  • class的名字和object的名字相同
    这时,class就是object的伴生类,object就是class的伴生对象
上一篇:这是关于scala计算n的阶乘的表达式


下一篇:Scala 速通语法(八)| 隐式转换