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) } }
主构造器和辅助构造器
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") } }
伴生类和伴生对象