Scala之旅-class和object详解
来源:互联网 发布:文章网站数据库设计 编辑:程序博客网 时间:2024/06/06 06:54
1.class
scala的类和C#中的类有点不一样,诸如: 声明一个未用priavate修饰的字段 var age,scala编译器会字段帮我们生产一个私有字段和2个公有方法get和set ,这和C#的简易属性类似;若使用了private修饰,则它的方法也将会是私有的。这就是所谓的统一访问原则。
细节的东西太多,还是上代码在注释里面细讲吧
//类默认是public级别的 class Person{ var age=18 //字段必须得初始化() def Age=age //这个是方法,没有参数可以省略() def incremen(){this.age+=1} } class Student{ var age=20 //底层编译器会自动为私有的age添加get和set的公有方法,可以理解为伪public类型 private[this] var gender="male" //private[this] 只有该类的this可以使用 private var name="clow" //声明了private,底层编译器会自动为私有的name添加get和set的私有方法 //但是可以自己定义属性方法 def getName=this.name def setName(value:String){this.name=value} } //构造器的使用 class Teacher { var age: Int = _ var name: String = _ //可以预留 //重载的构造器和C#里面的public Teacher(){}类似 def this(age: Int, name: String){ this() //必须得调用一次主构造器 this.age=age this.name=name } }
类的构造器细节
//1.主构造器在类名后,参数会被声明字段,若参数没有使用var或者val声明,则会被声明称私有字段 //2.实例化类的时候,类中的语句会被执行:println("person") class Person(name:String,var age:Int) { println("person") def show(): Unit = { println("show.."+name) } var gender:String=_ //次构造器必须调用主构造器,参数不能使用var def this(name:String,age:Int, gender:String){ this(name,age) this.gender=gender } }
2.scala没有静态的修饰符,但object下的成员都是静态的 ,若有同名的class,这其作为它的伴生类。在object中一般可以为伴生类做一些初始化等操作,如我们常常使用的val array=Array(1,2,3) (ps:其使用了apply方法)
object Dog{ private var age=0 def Age={ age+=1 age } } class Dog{ var age1=Dog.age //Dog.age是object Dog的私有字段。这不禁让我回想起了C++的友元类 }
3.Apply的使用
class ApplyTest{ val name="clow"; def apply() { println("class ApplyTest--apply()..."); } } //object下的成员默认都是静态的 object ApplyTest{ def apply() = { println("object ApplyTest--apply()..."); new ApplyTest() } } object Basic4 { def main(args: Array[String]) { //类名()->调用了对应object下的apply方法 var a1=ApplyTest() println(a1.name) //对象名()->调用了对应class的apply方法 a1() //输出:class ApplyTest--apply()... } }
Apply怎么用它来实现单例模式
class ApplyTest private{ //添加private隐藏构造器 def sayHello(){ println("hello jop") } } object ApplyTest{ var instant:ApplyTest=null def apply() ={ if(instant==null) instant=new ApplyTest instant } } object ApplyDemo { def main(args:Array[String]){ val t=ApplyTest() t.sayHello() } }
阅读全文
0 0
- Scala之旅-class和object详解
- Scala之旅-class和object详解
- Scala之旅-class和object详解
- Scala之旅-class和object详解
- Scala之旅-class和object详解
- Scala 之 object 和class
- scala之case class 和case object
- scala之class、singleton object
- scala中的object和class
- scala中的object和class
- Scala关键字class和object
- Scala 学习之 Class,Object, Trait
- scala中 object 和 class的区别
- Scala的object和class的区别
- scala class和object的区别
- 5-Scala对象(Class)和类(Object)
- scala class和object,trait的区别
- scala-29:Case class和Case object代码实战解析
- 148. Sort List
- Python中tile函数的用法
- 函数(python)
- httpurlconnection模板
- JavaScript初认识(一)
- Scala之旅-class和object详解
- 百度UEditor编译器中获取HTML和添加HTML问题
- pyspider_demo
- 求斐波那契数的两种方法(递归法和迭代法)
- 用JNDI实现数据库连接池
- Q
- java生成二维码(使用zxing.jar)
- 文章标题
- java 抽象类和接口