创建scala类名为OOPInScala.scala ,并增加object OOPInScala
package org.victor.scala.base
/**
* Company: Huazhong University of science and technology
* 华中科技大学电气学院聚变与等离子体研究所
* Version: V1.0
* Author: Victor
* Contact: [email protected] 2018--2020
* Software: IntelliJ IDEA
* File: OOPInScala
* Time: 2018/10/12 19:45
* Desc:
**/
class OOPInScala {
}
////创建一个User类 并增加name和age字段
class User{
var name:String = _ //"_"是代表PlaceHolder
var age = 25
//private的使用
private[this] val gender = "women"
}
//类的构造器,主构造器和附属构造器的使用
//主构造器函数的参数中没有用var 或者val去声明变量,那此时的变量是private[this]级别的,只能被类内部使用
class Dog(val name:String,val age:Int){
println("this is User class primary constructor")
/**
* 附属构造器的使用:
*
* 1、附属构造器是使用this来声明的
*
* 2、附属构造器必须调用主构造器或者其他附属构造器
*/
var gender:String = _//在附属构造器中新增属性时必须先申明
def this(name:String,age:Int,gender:String){
//调用主构造器
this(name,age)
//在附属构造器中新增属性,但是外部不能访问
this.gender = gender
}
}
object OOPInScala{
def main(args: Array[String]): Unit = {
//调用User类并执行
val user = new User
user.name = "lichanghong"
println("user.name:"+user.name)
println("user.age:"+user.age)
//下面的语句不能访问gender,可以看到 gender属性是 inaccessible的,
// 这样使用private[this]定义后的内容可以无法被外部使用了,这样启动很好的保护的作用了
//println("user.gender:"+user.gender)
println("====================")
//调用主构造器
val dog = new Dog("lichanghong",200);
println("dog.name:"+dog.name)
println("dog.age:"+dog.age)
//调用附属构造器
//因为传入三个参数,主构造器中只有两个参数,所以这里会调用附属构造器
val dogdog = new Dog("lichanghongHAA",100,"women")
println("dogdog.name:"+dogdog.name)
println("dogdog.age:"+dogdog.age)
//以下调用失败
//println("dogdog.gender:"+dogdog.gender)
}
}
从上面运行的结果我们可以发现scala主构造器特点:
1、主构造器直接跟在类名后面,主构造器中的参数会被编译成类的字段
2、主构造器执行的时候会执行类中的所有不包含在方法体中的语句
=========================================================
结果:
user.name:lichanghong
user.age:25
====================
this is User class primary constructor
dog.name:lichanghong
dog.age:200
this is User class primary constructor
dogdog.name:lichanghongHAA
dogdog.age:100
Process finished with exit code 0