您的位置:首页 > 其它

scala基础语法-类定义

2015-01-04 11:03 204 查看
package org.xj.scala.spark

/**

* .声明类:一个源文件中可以包含很多类,并且scala都是public级别的

*/

class Basic2 {

}

/**

* 定义一个类

* Scala中的var/val/def

* val和def都会被编译为一个方法,区别是:val会被编译器保证运行时其值不能改变,但def不同,是可以改变的。

* var则不同,其会被编译为两个方法,类似get,set方法

*/

/**

* class Person {

* /**

* var 声明会生成get,set方法,

* */

* var name: String = _ //定义了一个name,但是占时不给他赋予初始值,_代表前面的变量,或者前面的一串变量

* /**

* val 声明的变量只会生成get方法

* */

* val age: Int = 10 //值

*

* private[this] val gender = "male"
//常用定义,只限内部使用

* }

*/

//1、主构造器(构造方法)直接跟在类名后面,主构造器中的参数最后会被编译成字段

//2、主构造器执行的时候,会执行类中的所有语句

//3、假设参数声明时,不带val和var,那么相当于private[this] !!!内部才能访问的变量,

//如:class Person(name: String, val age: Int),这里name外部就无法访问

class Person(var name: String, val age: Int) {

println("this is the primary constructor")

var gender: String = _ //不赋予初始值

val school = "XJ"

//副(子)构造器,一定要在第一行调用主构造器(这里子构造器,可以参数可以不带,var和val)

//1、附属构造器,名称为this

//2、每一个附属必须首先调用已经存在的主构造器或者附属构造器

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

this(name, age) //副构造器,调用主构造器,没有这一行会报错

this.gender = gender

}

}

//继承父类中存在这样的参数,则不需要重新定义,可以直接使用

//1、确保每一个对象初始化的时候,帮你初始化和这个对象相关的所有信息(scala构造器一大特点)

/**

* 重写父类方法(Override def)

* 重写父类字段(override val,Override var)

*/

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

println("this is subclass of Person,major is :" + major)

//重写父类的字段,加override否则编译不通过

override val school = "ZS";

//重写父类方法,只要是父类拥有的方法,子类要去覆盖它,一定需要加上override,否则编译不会通过

override def toString = "Override to String..."

}

object Basic2 {

def main(args: Array[String]) {

// val p = new Person //当类没有参数传递的时候,括号可以省略

// p.name = "Jack";

// println(p.name + ": " + p.age);

// val p = new Person("andrew", 10,"male")

// println(p.name + ":" + p.gender )

val stu = new Student("justin", 20, "Math")

println(stu.toString+":"+stu.school )

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: