• Scala中class和object的区别


    1、class

            scala的类和C#中的类有点不一样,诸如: 声明一个未用priavate修饰的字段 var age,scala编译器会字段帮我们生产一个私有字段和2个公有方法get和set ,这和C#的简易属性类似;若使用了private修饰,则它的方法也将会是私有的。这就是所谓的统一访问原则。

    1. //类默认是public级别的  
    2. class Person{  
    3.   var age=18  //字段必须得初始化()  
    4.   def Age=age //这个是方法,没有参数可以省略()  
    5.   def incremen(){this.age+=1}  
    6. }  
    7.   
    8.   
    9. class Student{  
    10.   var age=20     //底层编译器会自动为私有的age添加get和set的公有方法,可以理解为伪public类型  
    11.   private[this] var gender="male" //private[this] 只有该类的this可以使用  
    12.   private var name="clow" //声明了private,底层编译器会自动为私有的name添加get和set的私有方法  
    13.   //但是可以自己定义属性方法  
    14.   def getName=this.name  
    15.   def setName(value:String){this.name=value}  
    16. }  
    17.   
    18. //构造器的使用  
    19. class Teacher {  
    20.   var age: Int = _  
    21.   var name: String = _  //可以预留  
    22.   
    23.   //重载的构造器和C#里面的public Teacher(){}类似  
    24.   def this(age: Int, name: String){  
    25.     this() //必须得调用一次主构造器  
    26.     this.age=age  
    27.     this.name=name  
    28.   }  
    29. }  

    2、scala没有静态的修饰符,但object下的成员都是静态的 ,若有同名的class,这其作为它的伴生类。在object中一般可以为伴生类做一些初始化等操作,如我们常常使用的val array=Array(1,2,3)  (ps:其使用了apply方法)

    1. object Dog{  
    2.   private var age=0  
    3.   def Age={  
    4.     age+=1  
    5.     age  
    6.   }  
    7. }  
    8.   
    9. class Dog{  
    10.   var age1=Dog.age //Dog.age是object Dog的私有字段。这不禁让我回想起了C++的友元类  
    11. }  

    3、Apply的使用,怎么解释呢? 还是来看看怎么用它来实现单例模式

    1. class ApplyTest private{  //添加private隐藏构造器  
    2.   def sayHello(){  
    3.     println("hello jop")  
    4.   }  
    5. }  
    6.   
    7. object ApplyTest{  
    8.   var instant:ApplyTest=null  
    9.   def apply() ={  
    10.     if(instant==null) instant=new ApplyTest  
    11.     instant  
    12.   
    13.   }  
    14. }  
    15.   
    16. object ApplyDemo {  
    17.   def main(args:Array[String]){  
    18.       val t=ApplyTest()  
    19.       t.sayHello()  
    20.   }  
    21. }  
  • 相关阅读:
    网络
    DB
    DevOps
    Linux 进程管理:Supervisor
    Tomcat相关知识
    Tomcat配置和数据源配置
    Eclipse智能提示及部分快捷键
    Servlet工作原理
    蜗牛
    Servlet技术
  • 原文地址:https://www.cnblogs.com/moonandstar08/p/5240222.html
Copyright © 2020-2023  润新知