Scala面向对象—类详解

package com.zzy
import scala.beans.BeanProperty
class Aclass {
  @BeanProperty//生成get和set方法对于其他框架里对标准的scalaBean的使用有重要作用
  var name=""


  private var age=0//屏蔽一些不合法的操作,提高程序的健壮性
  def getAge()=age
  def  setAge(age:Int):Unit={
    if (age>=0){
      this.age=age
    }else{
      this.age=18
    }
  }



  def  show():Unit={
    println("我是show方法")
  }
  def show2: Unit ={//方法无副作用可以不加括号
    println("我是show2方法")

  }

  //定制getter和setter-----按照java的方式写
  /*def getName():String=name
  def setName(name:String){this.name=name}*/

}
package com.zzy

import org.junit.Test

class Person (ad:String){//主构造器!!!

  var address=ad
  var  name="小白"
  var age=18


  //主构造器
  //无参构造器
  /*def Person(ad:String):Unit={
    println("主构造器被调用了")

  }*/
  //scala中只能有一个主构造器

  //辅助构造器
  def this(n:String,a:Int){
    this("河南")//调用主构造器
    this.name=n
    this.age=a
    println("辅助构造器被调用了")
  }




}

开发中正常一个类的结构

package com.zzy

import scala.beans.BeanProperty

class Address {
  //给出getter  setter

  @BeanProperty
  var city="郑州"
  @BeanProperty
  var street="十五大街"
  @BeanProperty
  var mail="450000"
  //主构造器就是无参的构造方法

  //辅助构造器
  def this(c:String,s:String,m:String) {
    this()
    this.city = c
    this.street = s
  }


//toString 重写了tostring
  override def toString = s"Address($city, $street, $mail)"

}
package com.zzy
import org.junit.Test

object MyTest {
  def main(args: Array[String]): Unit = {
    
    val aa = new Aclass
    aa.show()
    aa.name="赵云"//调用了setter
    println(aa.name)//调用了getter

    aa.show2

    //属性上加上@BeanProperty  对象就直接可以调用属性的get和set方法
    println(aa.getName)
    aa.setName("关羽")
    println(aa.getName)

    aa.setAge(-100)
    println(aa.getAge())//18


    //创建对象
   /*val person = new Person("郑州")//调用了有参数的主构造器
    println(person.address+"	"+person.name+"	"+person.age)*/

   /* val person2= new Person("曹操",50)
    println(person2.address+"	"+person2.name+"	"+person2.age)*/
    //有两个构造器(主,辅)就有两种方式创建对象


   /* val address = new Address
    println(address)*/

   /* val address2 = new Address("洛阳","凤凰街道","460000")
    println(address2)*/


  }


  //无法在object中使用junit
  @Test
  def myfunction():Unit={
    println("测试")
  }

}

Scala中junit的使用

package com.zzy
import org.junit.Test
class myJunitTest {//scala可以在class中使用junit   object中不可以

  @Test
  def show:Unit={
    println("测试junit")
  }

}
原文地址:https://www.cnblogs.com/qfdy123/p/11426598.html