scala面向对象编程 - 类、抽象类、伴生对象、继承、类的构造方法

1、类 、抽象类、伴生对象、继承

// scala中不存在public关键字,源文件中可以包含多个类,这些类都具有公有可见性
// 定义一个抽象类
abstract class Animal {
  val age:Int = 0
  val weight:Int = 0

  // 抽象类中的函数能有默认实现
  def cry(): Unit = println("This a Animal.")
}

// 定义一个类型,继承抽象类Animal,在Scala中和Java一样都是使用extends关键字进行继承。
class Cat extends Animal {
  // 重写父类方法。
  // 能访问伴生对象中的私有成员变量
  override def cry(): Unit = println(s"This a cat.${Cat.voice}")
}

// Cat的伴生对象,object定义的类,成为伴生对象,也是单例对象。
object Cat {
  private val voice = "喵喵喵"
  def apply(): Cat = {
    println("Cat apply.")
    new Cat()
  }

  // 重载apply()
  def apply(info:String): Cat = {
    println(info)
    new Cat()
  }

  def main(args: Array[String]): Unit = {
    // 这里相当于调用Cat伴生对象中apply()方法。伴生对象中的apply()方法,类似c++中重载()操作符
    val cat = Cat().cry()
    val cat2 = Cat("调用重载的构造方法").cry()
  }
}

2、类的构造方法

/**
  *每个类都有主构造器,主构造器的参数直接放置类名后面,与类交织在一起
  */
class Person (val name:String, val age:Int){ // 这里使用val 休息的成员变量,表示是私有属性的

  var gender: Char = 'M'
  println("主构造器")
  def this(name:String, age:Int, gender: Char) {
    this(name,age)   // 辅助构造器中,需要先调用主构造器
    this.gender = gender
    println("辅助构造器")
  }

  def print(): Unit = {
    println(s"name is ${name}; age is ${age}; gender is :${gender}")
  }
}

// 超类的构造语法
class Student(name:String, age:Int) extends Person(name, age) {
  override def print(): Unit ={
    System.out.print("I'm a student.")
    super.print()
  }
}

object Person {
  def main(args: Array[String]): Unit = {
    val p1 = new Person("xiao ming", 18)
    p1.print()
    val p2 = new Person("xiao hong", 12 , 'F')
    p2.print()
    val p3 = new Student("xiao nie", 11)
    p3.print()
  }
}





【来自@若泽大数据】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值