第三课 类和属性
来源:互联网 发布:蜜桃影院源码免费 编辑:程序博客网 时间:2024/06/16 08:42
scala 的主构造函数包括:
构造函数参数
类内部被调的方法
在类内部执行的表达式和语句
class Person(var firstName: String, var lastName: String) { //构造函数一部分 println("the constructor begin") private val HOME = System.getProperty("user.home") var age = 0 override def toString: String = s"$firstName $lastName is $age old" def printHOME(): Unit ={ println(s"HOME = $HOME") } def printFullName(): Unit ={ println(this) } //构造函数一部分 printHOME() printFullName() println("still in the constructor")}object Person extends App { val p = new Person("hello", "world")}
- 控制构造函数的可见性
在scala中构造函数的参数可见性被该字段是否被定义为val和var或者没有val,var的情况下是否被private关键字修饰所控制。
1. 如果一个字段被声明为var,scala为其生成getter和setter方法
2. 如果一个字段是val,scala为其生成getter方法
3. 如果一个字段没有val和var,scala不会为其生成getter和setter方法
4. val和var字段可以被private关键字修饰,防止生成getter和setter方法
var字段
class Person(var name: String) {}object Person extends App{ val p = new Person("wl") //setter p.name = "aa" //getter println(p.name)}
val字段
class Person(val name: String) {}object Person extends App{ val p = new Person("wl") //setter// p.name = "aa" 报错 //getter println(p.name)}
没有var和val字段
class Person(name: String) {}object Person extends App{ val p = new Person("wl") //setter// p.name = "aa" 报错 //getter// println(p.name) 报错}
给var和val加上private修饰
class Person(private var name: String) { def getName() = { this.name }}object Person1 extends App{ val p = new Person("wl") //setter// p.name = "aa" //getter// println(p.name) println(p.getName())}
- case 类构造函数参数默认val
case class Person(name: String)
val p = new Person("wl") //setter// p.name = "aa" //getter//name默认为val的,有getter方法println(p.name)
- 定义辅助构造函数
定义多个辅助构造函数,让用户通过不同方式创建对象实例
//primary constructorclass Pizza(var crustSize: Int, var crustType: String) { def this(crustSize: Int) = { this(crustSize, Pizza.DEFAULT_CRUST_TYPE) } def this(crustType: String) = { this(Pizza.DEFAULT_CRUST_SIZE, crustType) } def this()={ this(Pizza.DEFAULT_CRUST_SIZE, Pizza.DEFAULT_CRUST_TYPE) }override def toString: String = s"Pizza crustSize: $crustSize, crustType: $crustType"}object Pizza { val DEFAULT_CRUST_SIZE = 12 val DEFAULT_CRUST_TYPE = "THIN" def main(args: Array[String]): Unit = { val p1 = new Pizza() val p2 = new Pizza(12) val p3 = new Pizza("ll") val p4 = new Pizza(23, "aa")println(p1 +", "+p2 + ", "+ p3+", "+p4)}}
- 为case类生成辅助构造函数
case class Person(var name: String, var age:Int) { def getName() = { this.name }}object Person { def apply() = { new Person("no name", 0) } def apply(name: String) = { new Person(name, 0) }}
object CaseClassTest extends App{ val p = Person() println(p.name + " : " + p.age)}
- 定义私有主构造函数
为了使用单例,需要建私有主
class Brain private { override def toString: String = "this is a brain"}object Brain { val brain = new Brain def getInstance = brain}object SingletonTest extends App { val bran = Brain.getInstance println(bran)}在伴生对象中任意方法将会变成该对象的静态方法
- 设置构造函数参数的默认值
class Socket(val timeOut: Int = 10000, val linger: Int = 2000) {}object Socket extends App { val s = new Socket() println(s.timeOut) val s1 = new Socket(5000) println(s1.timeOut) val s2 = new Socket(timeOut = 2000) println(s2.timeOut) val s3 = new Socket(linger = 200) println(s3.timeOut+":"+s3.linger)}
- 覆写默认的getter和setter方法
- 将代码块或函数赋值给字段
case class Person(var username: String, var password: String) { var age = 0 var firstname = "" var lastname = "" var address = None: Option[Address]}case class Address(city: String, state: String, zip: String)
- 在继承类时处理构造函数参数
基类构造函数参数定义var或val,当定义一个子类时不要用var,val声明类间公用字段。在子类中用var或val定义新的构造函数参数。
case class Address(city: String, state: String, zip: String)class Person(var name: String, var address: Address){}class Emplyee(name: String, address: Address, var age:Int) extends Person(name , address){}
- 调用父类构造函数
class Animal(var name: String, var age: Int){ def this(name: String){ this(name, 0) }}class Dog(name: String) extends Animal(name){}class Dog1(name: String) extends Animal(name, 0){}
阅读全文
0 0
- 第三课 类和属性
- 第三课:Html5背景属性-背景和渐变
- 第三章常用的控件和属性
- 第三回:历史纠葛:特性和属性
- 第三回:历史纠葛:特性和属性
- 第三章常用的控件和属性
- 第三课:让控件动起来——理解对象和属性
- 第三章 tag之间的嵌套和属性读取
- HTML5第一阶段(第三章CSS核心属性和浮动)
- Java学习第三课 -- 类和对象
- 实例属性和类属性
- 类属性和实例属性
- 类属性 和实力属性
- 第三章 属性
- Android第三课;Button与ImageButton的基本属性
- 第三部分 类和结构---------------
- 类和对象第三讲
- 第三章 类和对象
- 7-23 哥尼斯堡的“七桥问题”(25 point(s))
- mysql-5.7.20-winx64安装教程
- HTML学习01-HTML简介
- 深入理解Java内部类
- 基于飞思卡尔MC9S12XS的Flash擦除和写入操作
- 第三课 类和属性
- Java服务端设置CORS跨越请求,Ajax跨越请求服务器设置
- Kaggle首份机器学习大调查:最常用的算法、语言竟然是......
- Android开发——自定义View之实现跟随手指移动的小球
- 干货|响应式网页设计
- Java虚拟机-理解Java虚拟机体系结构
- GO语言、DOCKER 和新技术
- JAVA基础--数据类型
- 如何解决H5新标签兼容问题