- 练习代码01:
package com.lijie.test
//第一个private表示包可见性在com.lijie下面的包可以访问这个类,其他包不能访问
//第二个private表示私有构造方法,表示只能在伴生对象才能new
//protected也可以修饰表示子类能访问
private[lijie] class Scala01 private {
//不可以修改
val a = "10086"
//可以修改
var b = 123
//伴生对象能使用
private var c: String = "lijie"
//本类才能使用
private[this] var d: Int = 10086
//默认没有值,需要用_或者null表示
var e:String = _
//可以使用本类的private[this]属性
private def fun01 = {
println(d)
}
private[this] def fun02 = {
println(Scala01.CON)
}
//可以访问本类的private[this]方法
private def fun03 = {
fun02
}
//指定包访问
private[test] def fun04 = {
println(d)
}
}
//伴生对象,一般和类在同一个文件里面,名字和类一样
object Scala01 {
//伴生对象里面定义的都是常量,并且可以控制包访问权限
private[lijie] val CON = "lijie"
def main(args: Array[String]): Unit = {
val s = new Scala01
// print(s.a)
// s.b = 1232
// s.fun01
// s.fun04
s.e
}
}
- 练习代码02
package com.lijie.test
//类名后面的是该类的主构造器,如果不写和java一样有个默认的无参构造
//如果写了有参数的构造器,无参数的构造器就不提供,和java一样
//主构造器参数相当于已经定义了两个成员变量了
//前面没有val或者var表示private[this],比如下面的c
//可以定义初始值,如下d默认为10011
//当定义初始值并且用val,表示对象生成了就不能改变这个值,但是可以在new对象的时候构造函数传入其它值
class Scala02(val a: Int, var b: String, c: String,var d:Int = 10011,val e:String = "world") {
}
object Scala02 {
def main(args: Array[String]): Unit = {
val obj01 = new Scala02(10086, "lijie","hello",10086,"aaa")
//如果定义了默认值,new对象可以不传这个默认值
val obj02 = new Scala02(10086,"lijie","hello")
}
}
- 练习代码03
package com.lijie.test
import scala.io.Source
class Scala03 {
//下面表示主构造器里面的方法---------------------------
//这是在主构造器,在new的时候会执行,这里在new时候会被初始化
var a = 10086
//new的时候被执行
println(a)
//上面表示主构造器里面的方法---------------------------
//这个是成员方法
def method01(a: Int, b: Int) = {
a + b
}
}
object Scala03 {
def main(args: Array[String]): Unit = {
val obj01 = new Scala03
}
}
- 练习代码04
package com.lijie.test
//object 单例对象
object Scala04 {
def main(args: Array[String]): Unit = {
val obj01 = Scala04
val obj02 = Scala04
//com.lijie.test.Scala04$@72b6507e
//com.lijie.test.Scala04$@72b6507e
println(obj01)
println(obj02)
}
}
- 练习代码05
package com.lijie.test
class Scala05(a: Int) {
}
object Scala05 {
def apply() = {
println("执行了apply方法")
}
def apply(name: String) = {
println("执行了apply方法" + name)
}
//技巧,使用apply创建对象
def apply(a: Int) = {
new Scala05(a)
}
def main(args: Array[String]): Unit = {
//这样会调用object的apply()的方法
val obj01 = Scala05()
val obj02 = Scala05("lijie")
//相当于调用的List或Array的apply的apply方法
List(1, 2, 3, 4, 5)
Array(1, 2, 3, 4, 5)
//可以使用apply方法创建对象,如上面的def apply(a: Int)方法
val obj03 = Scala05(10086)
//com.lijie.test.Scala05@66987c7d输出
println(obj03)
}
}
练习代码06
package com.lijie.test
//主构造器
class Scala07(val a: Int) {
var b: String = _
//辅助构造器
def this(a: Int, b: String) {
//必须先调用主构造器
this(a)
this.b = b
}
}
//extends App表示应用程序对象,不用main方法就可以执行
object Scala07 extends App{
object name extends App {
//主构造器创建对象
val obj01 = new Scala07(1)
//辅助构造器创建对象
val obj02 = new Scala07(1,"lijie")
}
}