前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala入门与进阶(四)- Scala面向对象

Scala入门与进阶(四)- Scala面向对象

作者头像
Meet相识
发布2018-09-12 17:04:45
4740
发布2018-09-12 17:04:45
举报
文章被收录于专栏:技术专栏

  1. Scala面向对象

1.面向对象概述

  • 封装:属性方法封装到类中
  • 继承:父类和子类直接的关系
  • 多态:***** 父类引用指向子类对象 精髓所在,开发框架的基石

2.类的定义和使用

代码语言:javascript
复制
package com.gwf.scala.course04

object SimpleObjectApp {

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

val person = new People()
person.name = "Messi"
println(person.name+" "+person.age)
println("invoke eat method "+person.eat)
person.watchFootball("Barcelona")
person.printInfo()
}

class People{
var name:String = _ //_代表占位符
val age = 10

// 私有变量,外部不能访问,[]里的this代表访问权限,可以填当前所在包,则包内可以访问
private [this] var gender:String = "male"

def printInfo(): Unit ={
println(gender)
}

def eat():String={
name + "eat ....."
}

def watchFootball(teamName: String)={
println(name+"is watching match of "+teamName)
}

}
}
代码语言:javascript
复制
scala> var d:Double = _
d: Double = 0.0

scala> val i:Int = _
<console>:11: error: unbound placeholder parameter
val i:Int = _
^

scala> var i:Int = _
i: Int = 0

scala> var s:String = _
s: String = null

scala>

3.主构造器和附属构造器

代码语言:javascript
复制
// 主构造器,如果不加val/var修饰符则默认是private[this] val 类型
class Person(val name:String,val age:Int,other:String){
println("Person Constructor enter...")
val school = "ustc"
var gender:String = _

def getOther(): String = other

def this(name:String,age:Int,other:String,gender:String){
this(name,age,other) // 附属构造器的第一行必须调用主构造器或者其他构造器
this.gender = gender
}
println("Person Constructor leave...")

}

4.继承

代码语言:javascript
复制
// 子类继承父类,父类的属性在子类构造函数中可以不加val/var声明,子类特有的属性必须要加,否则也会变成private[this] val
class Student(name:String,age:Int,other:String,val school:String) extends Person(name,age,other){

}

5.重写

代码语言:javascript
复制
class Student(name:String,age:Int,other:String,val school:String) extends Person(name,age,other){

// 重写必须加override
override val country: String = "USA"

// $代表this
override def toString = s"Student($country, $school)"
}

6.抽象类

代码语言:javascript
复制
/**
* 类的一个或者多个方法没有完整的实现(只有定义,没有实现)
*/
abstract class Person2{
def speak

var name:String

var age:Int
}

/**
* 普通了继承抽象类要实现未实现的抽象方法和抽象属性
*/
class Student2 extends Person2{
override def speak: Unit = println("speak")

override var name: String = _
override var age: Int = _
}

7.伴生类和伴生对象

代码语言:javascript
复制
/**
* 如果有一个class,还有一个与class同名的object
* 那么就称称这个个object是class的伴生対象, class是object的伴生类,两者相辅相成
*/
class ApplyTest{

}

object ApplyTest{

}

8.Apply 方法

代码语言:javascript
复制
package com.gwf.scala.course04

object ApplyApp {
def main(args: Array[String]): Unit = {
for(i <- 1 to 10){
ApplyTest.incr
}

println("count:"+ApplyTest.count) // 10 说明object本身就是一个单例对象

println("~~~~~~~~~~~~~")
val b = ApplyTest() // ==>Object.

println("~~~~~~~~~~~~~")
val c = new ApplyTest()
println(c)
c() // ==>Class.

// 类名() ===> Object.apply
// 对象() ===> Class.apply
}
}

/**
* 如果有一个class,还有一个与class同名的object
* 那么就称称这个个object是class的伴生対象, class是object的伴生类,两者相辅相成
*/
class ApplyTest{
def apply()= {
println("Class ApplyTest apply...")
}
}

object ApplyTest{

println("Object ApplyTest enter...")

var count = 0

def incr = {
count = count + 1
}

// 最佳实践:在0bject的apply方法中去new Class
def apply()= {
println("Object ApplyTest apply...")
}

println("Object ApplyTest leave...")

}

9.case class

代码语言:javascript
复制
package com.gwf.scala.course04

// 通常用到模式匹配里
object CaseClassApp {
def main(args: Array[String]): Unit = {
println(Dog("wangcai").name)
}
}

case class Dog(name:String)

10.Trait

Trait 类似于java的接口,但是可以集成抽象类,并实现其抽象方法。

代码语言:javascript
复制
// Triat多集成:XXX extends ATrait with BTrait
class SparkConf(loadDefaults: Boolean) extends Cloneable with Logging with Serializable {
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.07.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.面向对象概述
  • 2.类的定义和使用
  • 3.主构造器和附属构造器
  • 4.继承
  • 5.重写
  • 6.抽象类
  • 7.伴生类和伴生对象
  • 8.Apply 方法
  • 9.case class
  • 10.Trait
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档