美文网首页我爱编程
scala学习之旅(六):面向对象编程之类

scala学习之旅(六):面向对象编程之类

作者: 意浅离殇 | 来源:发表于2018-04-15 15:37 被阅读0次

    文章地址:http://www.haha174.top/article/details/256593
    1.定义一个简单的类


    //定义类包含field  方法
     class HelloClass {
       private var name="leo";
      def sayHello(){println("hello"+name)}
      def getName()=name
     }
    

    //创建类的对象并调用其方法

      var hello=new HelloClass
         hello.sayHello()
         println(hello.getName())
    

    2.getter 和setter

    1.定义不带private 的var field scala 会自动提供提供public 的set 和get 方法
    2.定义带private 的set 和get 方法 scala 会自动生成set 和get 方法 也是private 的
    3.如果定义 val field 只会生成 get 方法
    4.如果不需要set 和get 方法 则可以将field 声明为private[this]
    5.调用set 和get 方法分别石 name 和 name_
    6.自定义set 和get
    如果只需要简单的set 和get 可以根据scala 的语法选择合适的修饰符即可,
    如果需要自定义set get ,自定义set 方法的时候一定要注意scala 的语法限制,签名·=,参数之间不能又空格。
    7.java 风格的getter 和setter 方法
    如果让scala 生成java 生成setter 和getter 方法,只要给 field 添加 @BeanProperty注解即可 此时会生成4个方法
    name:String,name_=(newValue:String):Unit,getString():String,setName=(newValue:String):Unit。

    @BeanProperty var age:Int=_;
    

    3.constructor

    在Scala中,可以给类定义多个辅助constructor 类似java 中的构造重载,
    辅助constructor可以相互调用,而且必须第一行调用主constructor

      def this(name:String){
        this()
        this.name=name
      }
      def this(name:String,age:Int){
        this(name)
        this.age=age
      }
    

    在scala 中主 constructor与类名放到一起的

    class HelloClass
    

    主 constructor可以通过类名设定参数和默认值
    如果主主 constructor传入的参数什么修饰都没有,如name:String 如果类的内部用到了则会申明private[this] name;否则没有该field 只能被constructor代码使用

    4.内部类

    在scala 中同样也可以定义内部类,但是与java 不同的是,每个外部类的对象的内部类都是不同的类

    /** 
     * 第一种方式 
     * 在内部类通过【外部类.this.成员名称】 访问外部类成员 
     */  
    class OuterClass(val name:String){  
        
       class InnerClass(val name:String){  
           
          def info = println("Outer name :" + OuterClass.this.name + ",Inner Name :" + name);  
       }  
    }  
      
    /** 
     * 第二种方式 
     * 在内部类通过【外部类别名】 访问外部类成员 
     */  
    class OuterClass2(val name:String){  
      outer =>  
       class InnerClass2(val name:String){  
           
          def info = println("Outer name :" + outer.name + ",Inner Name :" + name);  
       }  
    }  
      
    object OuterAndInnerClassTest {  
        
      def main(args: Array[String]): Unit = {  
          
        println("第一种访问方式:")  
        val outer1 = new OuterClass("yy")  
        val inner1 = new outer1.InnerClass("xx")  
        inner1.info  
        println("第二种访问方式:")  
        val outer2 = new OuterClass2("yy2")  
        val inner2 = new outer2.InnerClass2("xx2")  
        inner2.info  
          
      }  
    }  
    

    欢迎关注,更多福利

    这里写图片描述

    相关文章

      网友评论

        本文标题:scala学习之旅(六):面向对象编程之类

        本文链接:https://www.haomeiwen.com/subject/zvwdkftx.html