zoukankan      html  css  js  c++  java
  • Scala中的类学习

    Scala中的类学习

    从java了解类的情况下,了解Scala的类并不难。Scala类中的字段自动带getter和setter方法,用@BeanProperty注解生成javaBean对象的getXXX与setXXX方法

    • 构造Scala的类
    class Counter {
        // 初始化字段值value
        private var value = 0
        // 方法默认是public的
        def increment() {
            value +=1
        }
        
        def current() = value
    }
    Scala中类不必声明为public,Scala源文件可以包含多个类,这些类都是默认public的。
    // 构造对象调用Counter
    val counter = new Counter()
    // 一般习惯对改值器使用(),对取值器不适用()
    counter.increment()
    println(counter.current)
    
    • 构造类setXXX与getXXX
    public class Person {
        private int age;
        public int getAge() {return age}
        public void setAge(int age) {this.age =age}
    // 在java中使用set,get方法对属性进行修改获取是比较好的一种方式。Scala中每个字段默认提供getter和setter方法
      // get方法
      def age = privateAge
      // set方法
      def age_(newValue: Int): Unit = {
        if (newValue > privateAge) {
          privateAge = newValue
        }
    }
    // junit的测试
     @Test
      def testCounter(): Unit = {
        val counter = new Counter()
        counter.increment()
        println(counter.current())
        counter.age_(10)
        println(counter.age)
        // 类私有的自动无法创建对象.属性调用
      }
     // Scala的字段加@BeanProperty
     import scala.reflect.BeanProperty
     class Person {
        @BeanProperty
         // 默认会生成get/set方法
         var name:String =_
     }
    
    • 构造器
        定义以this开头的是辅助构造器
      /**
        * 辅助构造器
        *
        * @param username
        */
      def this(username: String) {
        this()
        this.username = username
      }
    
      /**
        * 辅助构造器
        * @param username
        * @param score
        */
      def this(username: String, score: Int) {
        // 调用上一个构造器
        this(name)
        this.score = score
      }
      
      // 3种方法构建对象
      val p1 = new Person
      val p2 = new Person("Bob")
      val p3 = new Person("Bob",24)
      
      // 构建主构造器
      class Person(val name:String="",val age:Int=10) {
          println("这是构造方法")
          def des = "name="+name+",age="+age
      }
      
     val pserson = new Person("haha",12) 将会执行主构造方法
    
    • 内部类

    和java类似,Scala中也有内部类,但是比java更丰富些,Scala中调用的方式是new OuterClass.innerClass而java中式outClass.new InnerClass()

        class NetWork {
            class Member(val name: String) {
                val contacts = new ArrayBuffer[Member]
            }
            
            private val members = new ArrayBuffer[Member]
            
            def join(name: String) = {
                val m = new Member(name)
                members+=m
                m
            }
        }
        
        val beijing = new network
        val xian = new network
        val s1 = beijing.join("Bob")
        val s2 = beijing.join("Michael")
        // 同一种类型可以同一个集合
        s1.conttacts +=s2
        val s3 = xian.join("Alice")
        // 不可以将s3添加到s1中,因为不是同一个Network对象
    
  • 相关阅读:
    Python之future对象
    Mac上使用SQL Server作为开发用数据库
    EntityFramework Core CLI Tools 几点坑
    EasyExcel根据报表模板来填充报表(多sheet页填充、封装工具方法)
    【linux基础】解决shell错误:syntax error: unexpected end of file
    【DL基础】网络结构参数数量及大小的计算
    【CV基础】Residual Network(ResNet)
    【DL基础】模型训练测试过程消耗内存的计算
    【c++基础】c++中string 的replace用法
    【python基础】python 从list中随机取值的方法
  • 原文地址:https://www.cnblogs.com/codegeekgao/p/9619030.html
Copyright © 2011-2022 走看看