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 )
}
}
/**
* .声明类:一个源文件中可以包含很多类,并且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 )
}
}
相关文章推荐
- scala基础语法-类定义
- Scala基础语法(声明定义、标识符命名、Scala脚本入门)
- Objective-C最基础语法之Class定义
- scala入门2(简介与基础语法2--数值类型)
- Scala 方法定义及控制语法
- Java_语法基础_定义规范的接口类型
- 【Emit基础】IL定义方法的语法详解
- scala 基础语法
- scala基础语法-集合
- scala基础语法-match模式匹配
- Scala教程(二)基础语法
- scala入门3(基础语法之操作符运算)
- Scala 基础语法代码<转>
- Scala的数据类型和基础语法
- scala基础语法-隐式转换,隐式类
- scala基础语法
- scala入门1(简介与基础语法1)
- Scala 基础语法代码
- MySQL基础教程14 —— SQL语法之数据定义语句DDL
- Swift语法基础: 20 - Swift的定义和调用函数, 函数形参名