Scala中的面向对象

一 定义类

1.1 类

scala中定义类的方式:class 类名,例如我们定义个Person类

class Person{
}

1.2 属性/方法

在类中
1.添加属性的方式:val/var 名称[:类型]=值
2.添加方法的方式:def 方法名(参数列表):返回值类型={方法体}

class Person{
	// 类型可以省略
	var age = 18
	// _为占位符,那么name的默认值为null
	val name:String = _
	// 属性前面加上private表示私有的,外面就不可以直接调用
	private var gender = "M"
	// 定义方法
	def playbasketball(team:String)={
		println(name + " is playing basketball for " + team)
	}
	//定义方法
	def drinking() = {
		println(this.name + " is drinking...")
	}
}

我们调用一下上面的类

object SimpleClassApp {
  def main(args: Array[String]): Unit = {
  	//创建对象
    val person = new Person
    //给对象的属性赋值
    person.name="zhang san"
    //调用对象方法
    person.playBasketball("china")
    //调用对象方法
    person.drink()
  }
}

执行结果如下:
在这里插入图片描述

二 构造函数/继承

构造函数的方式:
1.类名(参数列表…)主构造器
2.def this (参数列表…) 附属构造器

class Person2(val name: String, val age: Int) {
  println("进入Person2构造器")
  val job = "解说员"
  var term = ""
  /**
    * 1.附属构造起的名称this
    * 2.每个附属构造起的第一行要么调用主构造器,要么调用其他附属构造起
    *
    */
  def this(name: String, age: Int, team: String) {
    this(name, age)
    this.term = team
  }
  println("执行完Person2构造器")
}

写一个student 继承Person2,继承的子类注意点已经在注释中写清楚了

/**
  * 继承:
  * 1.子类方法/构造器执行之前,会先执行父类的构造器
  * 2.对于父类没有的字段,需要加上val/var,否则访问不到
  *
  * @param name
  * @param age
  * @param stuId
  */
class Student(name: String, age: Int, val stuId: Int) extends Person2(name, age) {
  println("进入Student构造器")

  //如果要重写父类的属性或方法,那么前面要加上override
  override val job: String = "学生"
  //重写toString
  override def toString: String = {
    this.name + "\t" + this.age + "\t" + this.stuId
  }
  println("执行完Student构造器")
}

然后调用一下上面的类

object ConstructApp {

  def main(args: Array[String]): Unit = {
    val zhangsan = new Student("zhangsan", 20, 1001)
    println("name:" + zhangsan.name + ",age:" + zhangsan.age + ",stuId:" + zhangsan.stuId)
    println(zhangsan) 
  }
}

执行结果如下:
在这里插入图片描述

三 抽象类

Scala继承一个基类跟Java很相似,注意点:
1.类中有一个或者多个方法/属性,没有实现,那么为抽象方法
2.子类必须要实现父类的抽象方法或者属性
3.抽象类不能new
4.子类重写的抽象方法或者属性,不一定要加上override
5.重写一个非抽象方法必须使用override修饰符。

abstract class Person3 {
  //抽象方法
  def speak
  //抽象属性
  val name: String
  //非抽象方法
  def sayHello(): Unit = {
    println("abstract sayHello...")
  }
  //非抽象方法
  def walk(): Unit = {
    println("abstract walk...")
  }
}

class Student3 extends Person3 {
  //重写抽象方法
  def speak: Unit = {
    println("override speak...")
  }

  val name: String = "zhangsan"

  //重写非抽象方法
  override def sayHello(): Unit = {
    println("override sayHello...")
  }
}

写一个object调用上面的类

object AbstractApp {

  def main(args: Array[String]): Unit = {

    val student = new Student3
    println(student.name)
    student.speak
    student.sayHello()
    //调用继承过来的方法
    student.walk()
  }
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值