scala 类基础
scala> :paste
// Entering paste mode (ctrl-D to finish)
class HelloWorld {
private var name="tomcat"
def sayHello(){
println("hello "+name)
}
def getName = name
}
// Exiting paste mode, now interpreting.
defined class HelloWorld
scala>
scala> var h = new HelloWorld()
h: HelloWorld = HelloWorld@1cd9c2de
scala> h.sayHello()
hello tomcat
scala> h.getName
res26: String = tomcat
定义时 没括号 调用时也不能写括号
scala> h.getName()
<console>:13: error: not enough arguments for method apply: (index: Int)Char in class StringOps.
Unspecified value parameter index.
h.getName()
----------------------------------
getter 和 setter
scala> :paste
// Entering paste mode (ctrl-D to finish)
class student {
var name = ""
}
// Exiting paste mode, now interpreting.
defined class student
scala> var s = new student()
s: student = student@4718eb01
s.name 就相当于 getter
scala> s.name
res30: String = ""
s.name= --- 相当于setter
scala> s.name="tomcat"
s.name: String = tomcat
scala> s.name
res32: String = tomcat
----------------------------------
自定义的 getter setter
scala> :paste
// Entering paste mode (ctrl-D to finish)
class Student {
var name =""
def foo=name
def foo_=(newName:String){
name = newName+"!"
}
}
// Exiting paste mode, now interpreting.
defined class Student
scala> s.foo
res49: String = ""
scala>
scala> s.foo="99"
s.foo: String = 99!
----------------------------------
java 风格的个getter setter
使用 scala.beans.BeanProperty
scala> import scala.beans.BeanProperty
import scala.beans.BeanProperty
scala> :paste
// Entering paste mode (ctrl-D to finish)
class Student{
@BeanProperty var name:String =""
}
// Exiting paste mode, now interpreting.
defined class Student
scala>
scala>
scala> var s =new Student()
s: Student = Student@4130a648
scala> s.getName
res0: String = ""
scala> s.getName()
res1: String = ""
scala> s.setName("tomcat")
scala> s.getName
res3: String = tomcat
scala> s.getName()
res4: String = tomcat
----------------------------------
辅助构造函数 this()
scala> :paste
// Entering paste mode (ctrl-D to finish)
class Student
{
var name=""
var age =0
def this(name:String){
this()
this.name=name
}
def this(name:String,age:Int){
this(name)
this.age=age
}
}
// Exiting paste mode, now interpreting.
defined class Student
scala>
scala>
scala>
scala> var s = new Student()
s: Student = Student@7b58d678
scala> var s2 = new Student("tomcat")
s2: Student = Student@698e1bf5
scala> s2.name
res5: String = tomcat
scala> s2.age
res6: Int = 0
scala>
scala> var s3 = new Student("hadoop",10)
s3: Student = Student@13d1653
scala> s3.name
res7: String = hadoop
scala> s3.age
res8: Int = 10
----------------------------------
主构造函数
scala> :paste
// Entering paste mode (ctrl-D to finish)
class Student(name:String , age:Int){
println(name+"----"+age)
}
// Exiting paste mode, now interpreting.
defined class Student
scala>
scala>
scala> var s= new Student("tomcat",20)
tomcat----20
s: Student = Student@2daf650b
----------------------------------
主构造函数 中使用默认值
scala> :paste
// Entering paste mode (ctrl-D to finish)
class Student(name:String = "Tom" ,age:Int= 10){
println(name +""+age)
}
// Exiting paste mode, now interpreting.
defined class Student
scala>
scala> var s = new Student()
Tom10
s: Student = Student@5304ac92
----------------------------------
内部类
每个对象的 内部类 被认为是 不同的类
scala> :paste
// Entering paste mode (ctrl-D to finish)
class Clazz {
class Student(name:String){}
val students = new ArrayBuffer[Student]
def getStudent(name:String)={
new Student(name)
}
}
// Exiting paste mode, now interpreting.
defined class Clazz
scala>
scala> val c1 = new Clazz()
c1: Clazz = Clazz@6048e171
scala> val s1 = c1.getStudent("tom")
s1: c1.Student = Clazz$Student@109a5573
scala> c1.students += s1
res9: c1.students.type = ArrayBuffer(Clazz$Student@109a5573)
scala>
scala> val c2 = new Clazz()
c2: Clazz = Clazz@762cfcc1
scala> val s2 = c2.getStudent("jim")
s2: c2.Student = Clazz$Student@772dfe03
scala> c2.students += s2
res10: c2.students.type = ArrayBuffer(Clazz$Student@772dfe03)
scala>
scala> c1.students += s2
<console>:16: error: type mismatch;
found : c2.Student
required: c1.Student
c1.students += s2
----------------------------------