数据学习从0到1 Scala面向对象(一)

34 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第31天 juejin.cn/post/716729… Scala面向对象编程

Scala中类和java中的类基本是类似的

Scala中的对象时需要定义的,而java中的对象是通过class new出来的

Scala中的接口是trait,java中的接口是interface

类-class

首先看一下类

Scala中定义类和Java一样,都是使用 class 关键字

和Java一样,使用new关键字创建对象

那下面来看一个具体案例

定义Person类,创建对象并调用其方法

class Person{

var name = "scala"

def sayHello(){

println("Hello,"+name)

}

def getName= name

}

注意:如果在定义方法的时候指定了(),那么在调用的时候()可写可不写,如果在定义方法的时候没指定(),则调用方法时肯定不能带()

scala> val p = new Person()

p: Person = Person@23b8d9f3

scala> p.sayHello()

Hello,scala

scala> p.sayHello

Hello,scala

scala> println(p.getName)

scala

scala> println(p.getName())

:10: error: not enough arguments for method apply: (index: Int)Char in class StringOps.

Unspecified value parameter index.

println(p.getName())

constructor

类创建好了,下面我们来看一下类中的构造函数,

Scala类中的构造函数可以分为主构造函数和辅助构造函数

这两种构造函数有什么区别呢?

主constructor:类似Java的默认构造函数 this()

辅助constructor:类似Java的重载构造函数 this(name,age)

主constructor

那先来看一下主构造函数

Scala的主constructor是与类名放在一起的,与Java不同,Java中的构造函数是写在类内部的

注意:在类中,没有定义在任何方法或者是代码块之中的代码就是主constructor的代码

上代码:

先定义一个Student类

class Student(val name:String,val age:Int){

println("your name is " + name + ", your age is " + age)

}

创建对象

scala> new Student("zs",19)

your name is zs, your age is 19

res8: Student = Student@3134153d

在创建对象的时候,类中的println语句执行了,说明这个语句属于主构造函数中的代码

主constructor中还可以通过使用默认参数,来给参数设置默认值

class Student(val name:String = "jack",val age:Int = 20){

println("your name is " + name + ", your age is " + age)

}

创建对象

scala> new Student()

your name is jack, your age is 20

res10: Student = Student@7ddd84b5

scala> new Student("tom",18)

your name is tom, your age is 18

res11: Student = Student@a09303

辅助constructor

Scala中,可以给类定义多个辅助constructor,类似于java中的构造函数重载

辅助constructor之间可以互相调用,但是第一行必须调用主constructor

来看一个案例:

给学生指定姓名和年龄信息

class Student {

var name = "jack"

var age = 10

def this(name: String) {

this()

this.name = name

}

def this(name: String, age: Int) {

this(name)

this.age = age

}

}

执行

scala> val s = new Student("tom")

s: Student = Student@1a538ed8

scala> val s = new Student("mick",30)

s: Student = Student@319642db