scala 入门2

1 创建类和对象

class Abc{}

val a = new Abc()

class Abc

val a = new Abc

 

2 定义和访问成员变量

class Abc {
var a1 = ""
var a2 = 0
}

val abc = new Abc
abc.a1= "demo"
abc.a2= 3

 

3 下划线初始化成员变量(只有var 定义的变量可以用_初始化)

class Abc {
var a1:String = _
var a2:Int = _
}

val abc = new Abc
abc.a1= "demo"
abc.a2= 3

 

4 定义成员方法

class Abc {
var a1:String = _
var a2:Int = _

def hello(a3:String)= {

println(a1+"_"+a3)

}
}

val abc = new Abc
abc.a1= "demo"
abc.a2= 3

abc.hello("4")

 

5 访问修饰符

class Abc {

private a1:String = _
private a2:Int = _

def getA1() = a1
def setA1(a1:String) = this.a1 = a1
def getA2() = a2
def setA2(a2:Int) = this.a2 = a2
}

val abc = new Abc
abc.setA1("demo")
abc.setA2(3)
println(abc.getA1())
println(abc.getA2())

 

6 主构造器

class Abc(var a1:String = "", var a2:Int = 0) {
println("调用abc")
}


val abc1 = new Abc("1", 10)
println(abc1.a1)
println(abc1.a2)

val abc2 = new Abc
println(abc2.a1)
println(abc2.a2)

val abc3 = new Abc(a2 = 30)
println(abc3.a1)
println(abc3.a2)

 

7 辅助构造器

class Abc(var a1:String = "", var a2:String = "") {
  def this(arr:Array[String]) = {
    this(arr(0), arr(1))
  }
}

val abc = new Abc(Array("1", "2"))
println(abc.a1)
println(abc.a2)

 

8 定义单例对象

object Abc{

val num = 1
}

def main(args: Array[String]): Unit = {
println(Abc.num)
}

 

object Abc{
  val num = 1

  def print() ={
  println("-"*10)
  }

}

def main(args: Array[String]): Unit = {
  println(Abc.num)
  Abc.print
}

 

object Abc{
private val dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm")

def format() ={
dateFormat.format(new Date())
}

}

def main(args: Array[String]): Unit = {
println(Abc.format())
}

 

9 main 方法

def main(args: Array[String]): Unit = {
println(Abc.format())
}

 

object t02 extends App {

println("123")

}

 

10 伴生对象

class Abc{
def test()={
println(s"${Abc.a1} 测试")
}
}

object Abc{
private val a1="123"
}

def main(args: Array[String]): Unit = {
val abc = new Abc()
abc.test()
}

private[this],只能在当前类中访问。

class Abc(private var a1:String)
object Abc{
def method1(abc:Abc) = {
println(abc.a1)
}
}

def main(args: Array[String]): Unit = {
val abc = new Abc("qq")
Abc.method1(abc)
}

 

11 apply方法

class Abc(var a1:String="",var a2:Int=0)

object Abc{
def apply(a1: String, a2: Int): Abc = new Abc(a1, a2)
}

def main(args: Array[String]): Unit = {
val abc = Abc("1",2)
println(abc.a1)
println(abc.a2)
}

 

12 继承 (重点)

12.1 类继承

class Parent {
var a1 = "a1"

def getA1 = this.a1
}

class Children extends Parent

object t07 {

def main(args: Array[String]): Unit = {
val parent = new Parent()
val children = new Children()
children.a1 = "a1"
println(children.getA1)
}
}

 

12.2 单例对象继承

class Parent {
var a1 = "a1"

def getA1 = this.a1
}

object Children extends Parent

object t07 {

def main(args: Array[String]): Unit = {
println(Children.getA1)
}
}

 

13 override和super  ( 重写成员变量是 val 类型, var类型 报错 ; super关键字访问父类成员方法)

class Parent {
val a1 = "a1"
def getA1 = this.a1
}

class Children extends Parent {
override val a1 = "a2"   
override def getA1: String = "children:" + super.getA1
}

object t07 {
def main(args: Array[String]): Unit = {
println(new Children().getA1)
}
}

 

14 类型判断

isInstanceOf 对象是否为指定类对象 (只判断对象是否为指定类以及其子类对象)
asInstanceOf 对象转换为指定类型

class Parent {
val a1 = "a1"
def getA1 = this.a1
}

class Children extends Parent {
override val a1 = "a2"
override def getA1: String = "children:" + super.getA1
}

object t07 {
def main(args: Array[String]): Unit = {
val parent:Parent = new Children()
if(parent.isInstanceOf[Children]){
println("parent.isInstanceOf[Children]")
val children = parent.asInstanceOf[Children]
println(children.getA1)
}
}
}

 

15 getClass (精确获取对象类型) 和 classOf (精确获取类型)  和 ==操作符可以直接比较类型

class Parent {
val a1 = "a1"
def getA1 = this.a1
}

class Children extends Parent {
override val a1 = "a2"
override def getA1: String = "children:" + super.getA1
}

object t07 {
def main(args: Array[String]): Unit = {
val parent:Parent = new Children()
println(parent.isInstanceOf[Parent])
println(parent.getClass == classOf[Parent])
println(parent.getClass == classOf[Children])
}
}

 

16 抽象类 (重点)  只能是 类继实现 抽象类, 单例对象不可以。

方法没有方法体(抽象方法)
变量没有初始化(抽象字段)

abstract class Root {
def area:Double
}

class Children1(var edge:Double) extends Root{
override def area: Double = edge*edge
}

class Children2(var length:Double,var width:Double) extends Root{
override def area: Double = length*width
}

object t08 {
def main(args: Array[String]): Unit = {
val children1:Root = new Children1(1)
val children2:Root = new Children2(1,2)
println(children1.area)
println(children2.area)
}
}

 

17 抽象字段  (   var  val  类型字段都可以 )

abstract class Root {
val a1 :String
def area:Double
}

class Children1(var edge:Double) extends Root{

override val a1: String = "children1"
override def area: Double = edge*edge

}

class Children2(var length:Double,var width:Double) extends Root{
override val a1: String = "children2"
override def area: Double = length*width
}

object t08 {
def main(args: Array[String]): Unit = {
val children1:Root = new Children1(1)
val children2:Root = new Children2(1,2)
println(children1.a1)
println(children2.a1)
}
}

 

18 匿名内部类  (没有名称子类,Spark  源代码  用到匿名内部类 )

abstract class Root {
var a1: String

def a2
}


object t08 {
def main(args: Array[String]): Unit = {
var children1: Root = new Root {
override var a1: String = "a1"

override def a2 = println("匿名")
}

println(children1.a1)
children1.a2

}
}

 

19 特质 (重点)  (类似 接口, 每个类都只能继承一个超类, 而一个类可以添加任意数量特质 ,scala 类、抽象类、特质,都使用extends关键字)

 

19.1 类继承1个trait

trait Root {
def a1(msg:String)
}

class Children extends Root {
override def a1(msg:String): Unit = println("children:"+msg)
}


object t08 {
def main(args: Array[String]): Unit = {
val children = new Children()
children.a1("abc")
}
}

 

19.2 类继承多个trait

trait Root {
def a1(msg:String)
}

trait Test {
def a2(msg:String)
}

class Children extends Root with Test {
override def a1(msg:String): Unit = println("children:"+msg)

override def a2(msg: String): Unit = println("test:"+msg)
}


object t08 {
def main(args: Array[String]): Unit = {
val children = new Children()
children.a1("abc")
children.a2("abc")
}
}

19.3 object继承trait


trait Root {
def a1(msg: String)
}

object Children extends Root {
override def a1(msg: String): Unit = println("children:" + msg)
}

object t08 {
def main(args: Array[String]): Unit = {
Children.a1("abc")
}
}

 

19.4 特质中定义具体方法 ,特质定义具体的字段和抽象字段 

import java.text.SimpleDateFormat
import java.util.Date

trait Root {
val sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm")
def a1(msg: String)
}
class Children extends Root {
override def a1(msg: String): Unit = {
val info = s"${sdf.format(new Date())}:控制台消息 :${msg}"
println(info)
}
}

object t08 {
def main(args: Array[String]): Unit = {
val children = new Children()
children.a1("abc")
}
}

 

20 实现模板模式

trait Root {
def base(msg: String)
def a1(msg:String) = base("a1="+msg)
def a2(msg:String) = base("a2="+msg)
def a3(msg:String) = base("a3="+msg)

}


class Children extends Root {
override def base(msg: String): Unit = {
println(msg)
}
}

object t08 {
def main(args: Array[String]): Unit = {
val children = new Children()
children.a1("a1")
children.a2("a2")
children.a3("a3")
}
}

 

21 对象混入 (将trait混入对象中,就是将trait中定义方法、字段添加到一个对象)

 

trait Root {
def base(msg: String) = println(msg)
}

class Children

object t08 {
def main(args: Array[String]): Unit = {
val children = new Children() with Root
children.base("123")
}
}

 

22 调用链

trait Root {
def base(msg: String) = println(msg)
}

trait Children1 extends Root {
override def base(msg: String): Unit = {
println("Children1")
super.base(msg)
}
}

trait Children2 extends Root {
override def base(msg: String): Unit = {
println("Children2")
super.base(msg)
}

}


class Children3 extends Children2 with Children1 {
override def base(msg: String): Unit = {
println("Children3")
super.base(msg)
}
}

object t08 {
def main(args: Array[String]): Unit = {
val children = new Children3()
children.base("123")
}
}

 

23      trait

23.1   trait构造机制

package cn.test


trait Root {
println("执行构造器")
}

trait Children1 extends Root {
println("Children1")
}

trait Children2 extends Root {
println("Children2")
}


class Children3 extends Children2 with Children1{
println("Children3")
}

object t08 {
def main(args: Array[String]): Unit = {
val children = new Children3()
}
}

 

23.2   trait继承class

class Root {
def log0(msg:String) = println(msg)
}

trait Children1 extends Root {
def log1(msg:String) = log0("children1:" + msg)
}


class Children3 extends Children1{
def log3() = log1("children3")
}

object t08 {
def main(args: Array[String]): Unit = {
val children = new Children3()
children.log3()
}
}

 

posted @   163博客  阅读(16)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示