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的伴生对象