Scala编程

Scala编程详解11:面向对象编程之继承

2020-05-26  本文已影响0人  勇于自信
1.extends
class Person {
  private var name = "leo"
  def getName = name
}
class Student extends Person {
  private var score = "A"
  def getScore = score
}
2. override和super

object scala_demo09 {
  def main(args: Array[String]): Unit = {
    val stu = new Student
    println(stu.getName)

  }
}

class Person {
  private var name = "leo"
  def getName = name
}
class Student extends Person {
  private var score = "A"
  def getScore = score
  override def getName = "Hi, I'm " + super.getName
}

输出:
Hi, I'm leo

3. override field
class Person {
  val name: String = "Person"
  def age: Int = 0
}

class Student extends Person {
  override val name: String = "leo"
  override val age: Int = 30
}
4. isInstanceOf和asInstanceOf
class Person
class Student extends Person
val p: Person =  new Student
var s: Student = null
if (p.isInstanceOf[Student]) s = p.asInstanceOf[Student]
5. getClass和classOf
class Person
class Student extends Person
val p: Person = new Student
p.isInstanceOf[Person]
p.getClass == classOf[Person]
p.getClass == classOf[Student]
6. 使用模式匹配进行类型判断

class Person
class Student extends Person

object scala_demo08 {
  def main(args: Array[String]): Unit = {
    val p: Person = new Student
    p match {
      case per: Person => println("it's Person's object")
      case _  => println("unknown type")
    }
  }
}

输出:
it's Person's object

7. protected
class Person {
  protected var name: String = "leo"
  protected[this] var hobby: String = "game"
} 
class Student extends Person {
  def sayHello = println("Hello, " + name)
  def makeFriends(s: Student) {
    println("my hobby is " + hobby + ", your hobby is " + s.hobby)
  }
}
8. 调用父类的constructor
class Person(val name: String, val age: Int)
class Student(name: String, age: Int, var score: Double) extends Person(name, age) {
  def this(name: String) {
    this(name, 0, 0)
  }
  def this(age: Int) {
    this("leo", age, 0)
  }
}
9. 匿名内部类
class Person(protected val name: String) {
  def sayHello = "Hello, I'm " + name
}
val p = new Person("leo") {
  override def sayHello = "Hi, I'm " + name
}
def greeting(p: Person { def sayHello: String }) {
  println(p.sayHello)
}
10. 抽象类

abstract class Person(val name: String) {
def sayHello: Unit
}
class Student(name: String) extends Person(name) {
def sayHello: Unit = println("Hello, " + name)
}

11. 抽象field

abstract class Person {
val name: String
}

class Student extends Person {
val name: String = "leo"
}

上一篇 下一篇

猜你喜欢

热点阅读