zoukankan      html  css  js  c++  java
  • Scala--类

    一、简单类和无参方法

      class Counter{
        private var value = 0
        def increment(){value += 1} //改变对象状态的方法 使用()
        def current = value //取值,不改变对象状态的方法, 不使用()
      }
    
      val c  = new Counter
      c.increment()
      println(c.current)  //直接获取值,不带()

    结果

    1

     改值函数使用()

    取值函数不使用()

    方法默认是共有的

    二、带getter和setter属性

    //  class Persion{
    //    var age = 0 //非private,可以使用getter和setter
    // def current = age //如果age为private,可以自定义一个getter方法
    // } class Persion{ private var privateAge = 0 def age = privateAge //getter 方法 age def age_=(newAge:Int) { //setter 方法 age_= _和=不能分开,中间不能有空格, if(newAge>privateAge) privateAge = newAge } } val f = new Persion f.age = 30 f.age = 20 println(f.age)

    结果

    30

    三、对象私有字段

    四、Bean属性

      import scala.beans.BeanProperty
      class Persion{
        @BeanProperty var age = 0
      }
    
      val p = new Persion
      p.setAge(10)
      println(p.getAge)

    结果

    10

    五、辅助构造器

      class Persion{
        private var age = 0
        private var name = ""
    
        def this(name:String){   //辅助构造器
          this()         //调用主构造器
          this.name = name
        }
    
        def this(name:String,age:Int){ //辅助构造器
          this(name)     //调用辅助构造器
          this.age = age
        }
        
      }
      val p = new Persion          //主构造器
      val p1 = new Persion("Tom")    //辅助构造器
      val p2 = new Persion("Tom",10) //辅助构造器

    六、主构造器

     

      class Persion(val name:String, val age:Int){ //主构造器的参数直接放置在类名之后
        println("Hi") //主构造器会执行类定义中的所有语句
      }
    
      val p = new Persion("Tom",10)

    七、嵌套类

     

    1.

        class Counter{
          var value = 0L
          def increment() = value+=1
          def current = value
        }
    
        val c = new Counter
        c.value=Int.MaxValue
        c.increment()
        println(c.current)

    2.

        class BackAccount{
          private var value = 0D
          def deposit(money:Double): Unit ={
            value += money
          }
          def withdraw(money:Double): Unit ={
            value -= money
          }
          def current = value
        }
    
        val acc = new BackAccount
        acc.deposit(100)
        acc.withdraw(20)
        println(acc.current)

    3.

        class Time(val hours:Int,val minutes:Int){
          def before(other:Time): Boolean ={
            if (hours==other.hours) minutes<other.minutes else hours<other.hours
          }
        }
        val t1 = new Time(2,17)
        val t2 = new Time(3,18)
        println(t1.before(t1))

    4.

        class Time(val hours:Int,val minutes:Int){
          def before(other:Time): Boolean ={
            if (hours==other.hours) minutes<other.minutes else hours<other.hours
          }
          def display(): Unit ={
            println(hours+":"+minutes)
          }
          def display1(): Unit ={
            println(hours*60+minutes)
          }
        }
        val t1 = new Time(2,17)
        val t2 = new Time(3,18)
        t1.display()
        t1.display1()
        println(t1.before(t1))
        println(t1.hours)

    5.

        import scala.reflect.BeanProperty
    
        class Student{
          @BeanProperty val name:String =""
          @BeanProperty val id:Long = 0L
        }
    D:>scalac Student.scala
    
    D:>javap -private Student
    Compiled from "Student.scala"
    public class Student {
      private final java.lang.String name;
      private final long id;
      public java.lang.String name();
      public long id();
      public java.lang.String getName();
      public long getId();
      public Student();
    }

    6&7. val

        class Person(val fullname:String){
          val firstName:String = fullname.split(" ")(0)
          val lastName:String = fullname.split(" ")(1)
          private var privateAge = 0
          def age = privateAge
          def age_=(newAge:Int): Unit ={
            if (newAge<0) privateAge = 0
          }
        }
    
        val p = new Person("Fred Smith")
        println(p.firstName)
        println(p.lastName)

    8.必填参数设置为主构造器

    9.

    10.

    参考《快学Scala》

  • 相关阅读:
    在 IdentityServer4 中创建客户端
    IdentityServer4 快速上手
    GraphQL Part IV: 浏览器内的 IDE
    GraphQL Part VII: 实现数据变更
    GraphQL Part VIII: 使用一对多查询
    GraphQL Part VI: 使用 Postgres 和 EF Core 持久化数据
    GraphQL Part V: 字段,参数和变量
    GraphQL Part III: 依赖注入
    GraphQL Part II: 中间件
    GraphQL Part I: hello, world.
  • 原文地址:https://www.cnblogs.com/one--way/p/5800015.html
Copyright © 2011-2022 走看看