scala基础语法-类定义

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 )
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值