scala基础2

继承

子类extends 父类

package com.ruozedata.bigdata.scala03
//父类
class Person {
  var name : String =_
  var age :Int = _
}

package com.ruozedata.bigdata.scala03
//子类
class Student extends Person{
//name继承自父类,study是子类独有的方法
  def study(course : String)=print(name+"在学习")
}

object Student{
  def main(args: Array[String]): Unit = {
    val student = new Student()
    student.name="zhangsan"
    student.study("math")

  }

}

继承就代表子类可继承父类的field和method,然后子类还可以在自己的内部拥有自己的field和method。
在Scala中的继承:
1、private 修饰的field和method不可以被子类继承,职能在类的内部使用
2、使用final修饰符时,修饰类:类不能被继承;修饰filed和method:可以被继承,不能被重写

override的使用场景

1、Scala中,如果子类要重写父类中的一个非抽象方法,必须要使用override关键字。
2、子类可以覆盖父类中val修饰的field,只要在子类中使用override关键字即可。(注意:父类中var修饰的field,子类不能覆写)

继承中的constructor

创建子类对象时,会自动调用子类响应的构造器:
1、调用子类主构造器
2、调用子类辅构造器,辅构造器会再去调用主构造器。
创建子类对象时,会先去调用父类的构造器:子类主构造器去调用父类zhong的构造器。

Scala中的抽象类

如果在父类中,有某些方法无法立即实现,而需要依赖不用的子类来覆盖,重写实现不同的方法。此时,可以将父类中的这些方法编写成只有含方法声明,不含方法体的形式。
一个类中,如果有一个抽象方法或抽象field,就必须使用abstract将类声明为抽象类,该类是不可被实例化的,而是通过子类(不能还是抽象的)来new。

trait

Scala中不能多继承
如果想多继承,就使用trait。scala不支持对类进行多继承,但是支持多重继承trait,使用with关键字即可。
trait中:可以定义抽象方法外还可以定义属性和方法的实现:抽象字段,具体字段,具体方法,抽象方法。
!!当类继承多个trait时,而这些trait中都共有同一个方法,那么子类调用时到底执行哪个trait中的方法? 首先会从最右边的trait的方法开始执行。


高阶函数

**map函数:**对传入的每个元素都进行映射,返回一个处理后的元素

List l  = List(1,2,3,4,5,6,7,8,9)
l.map(_*10)//List里的每个元素*10 精简写法
l.map(el=>el+10) list里的每一个元素+10

filter函数:
对每个元素进行条件判断,true则保留,否则过滤

l.map(*2).filter(_>10)//大于10的所有元素
l.map(*2).filter(_>10).take(2) 表示取前面的2个

reduce():
两两操作
l.reduce(+)

fold()
初始值
l.fold(10).(+)

count()
l.count(_>3)

flatten
val a = List(List(1,2),List(3,4),List(5,6))
a.flatten ⇒ List(1,2,3,4,5,6)

flatMap ⇒ flatten+map
a.flatMap(.map(*2))
⇒ List(2,4,6,8,10,12)

val lines = ......

hello   world   hello
hello   world   welcome
hello

val words = lines.flatMap(_.split("\t"))
hello   
world   
hello
hello   
world   
welcome
hello
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值