import scala.collection.mutable.ArrayBuffer class Class { class Student(val name: String) {} //此處爲內部類 val students = new ArrayBuffer[Student] def getStudent(name: String) = { new Student(name) } } val c1 = new Class val s1 = c1.getStudent("0mifang") c1.students += s1 val c2 = new Class val s2 = c2.getStudent("0mifang1") c1.students += s2 //錯誤的演示
class Person { private var name = "0mifang" def getName = name } class Student extends Person { private var score = "A" def getScore = score } var student = new Student student.getName
class Person { private var name = "0mifang" def getName = name } class Student extends Person { private var score = "A" def getScore = score override def getName = "Hi, I'm " + super.getName } var student = new Student student.getName // 能夠發現,student 類繼承了 Person 類的 getName 方法
子類能夠覆蓋父類的 val field,並且子類的 val field 還能夠覆蓋父類的 val field 的 getter 方法,只要在子類中使用 override 關鍵字便可編程
class Person { val name: String = "Person" def age: Int = 0 } class Student extends Person { override val name: String = "0mifang" override val age: Int = 18 } val person = new Person val student = new Student person.name person.age student.name student.age
若是咱們建立了子類的對象,可是又將其賦予了父類類型的變量。則在後續的程序中,咱們又須要將父類類型的變量轉換爲子類類型的變量,應該如何作? 首先,須要使用 isInstanceOf 判斷對象是不是指定類的對象,若是是的話,則可使用 asInstanceOf 將對象轉換爲指定類型。ide
class Person class Student extends Person val p: Person = new Student var s: Student = null // 若是 p 是 Student 類,則讓 s 指向 p 轉換爲 Student 的對象 if (p.isInstanceOf[Student]) s = p.asInstanceOf[Student]
對象.getClass
能夠精確獲取對象的類,classOf[類]
能夠精確獲取類,而後使用 == 操做符便可判斷。class Person class Student extends Person val p: Person = new Student p.isInstanceOf[Person] //true p.getClass == classOf[Person] //false p.getClass == classOf[Student] //true
歡迎關注,本號將持續分享本人在編程路上的各類見聞。scala