zoukankan      html  css  js  c++  java
  • Scala学习笔记-4-组合和继承

    package day05
    
    object Demo {
    
      def main(args: Array[String]): Unit = {
    
        // 原则上 Scala 的函数调用中可以省略所有的空括号。
        "hello".length()
        "hello".length
      }
    }
    
    // Scala 也允许你使用 var 关键字来定义参数化成员变量,使用 var 定义的成员变量,可以重新赋值
    // 此外 Scala 也允许你使用 private,protected,override 来修饰参数化成员变量,和你定义普通的成员变量的用法一样。
    class Demo {
      val name = "zhangsan"
      var age = 12
      private val favorite = "game"
      protected def show(): Unit = println(favorite)
    }
    
    // 无参数方法
    abstract class Element1 {
      def contents: Array[String]
      def height: Int = contents.length
      def  Int = if (height == 0) 0 else contents(0).length
    }
    
    // 空括号方法
    abstract class Element2 {
      def contents(): Array[String]
      def height(): Int = contents.length
      def width(): Int = if (height == 0) 0 else contents()(0).length
    }
    
    // 也可以用成员变量定义
    // 效果是等价的,唯一的差别是使用成员变量的方法调用速度要快些,因为字段值在类被初始化的时候被预计算,而方法调用在每次调用的时候都要计算。
    abstract class Element3 {
      def contents: Array[String]
      val height: Int = contents.length
      val  Int = if (height == 0) 0 else contents(0).length
    }
    
    // 可以使用成员变量来重载一个不带参数的成员函数。
    class MyElement1(array: Array[String]) extends Element1 {
      override val contents: Array[String] = array
    }
    
    // 无论是无参数方法还是空括号方法都可以这样
    class MyElement2(array: Array[String]) extends Element2 {
      override val contents: Array[String] = array
    }
    
    // Scala 支持使用参数化成员变量,也就是把参数和成员变量定义合并到一起(合并到类变量里面)
    class MyElement3(val contents: Array[String]) extends Element3
    
    // 调用基类构造函数
    // 继承带参数的类时需要向基类传递参数
    class MyElement3Ext1(s: String) extends MyElement3(Array(s))
    // 也可以直接向基类中填写参数
    class MyElement3Ext2(s: String) extends MyElement3(new Array[String](0))
    
    // 多态和动态绑定:调用哪个类型的方法取决于运行时变量当前的类型,而不是定义变量的类型。(和 Java 一样,略)
    
    // 定义 final 成员(和 Java 一样,略)
    
    // 使用组合还是继承
    // 继承是is a 的关系(Student is a Person):MyElement1 与 Element1 属于继承关系
    // 组合是has a的关系(one person has a head):MyElement1 与 Array 属于组合关系(组合是指一个类持有另一个类的引用,借助引用完成任务。感觉就是一个成员变量)
    
  • 相关阅读:
    题解 DTOJ #1438. 矮人排队(lineup)
    题解 DTOJ #4423. 「THUSC2019」塔
    题解 DTOJ #4123.「2019冬令营提高组」全连
    题解 DTOJ #4016.辉夜的夜空明珠(moon)
    题解 DTOJ #2498.大步小步(babystep)
    题解 DTOJ #3326.组队(group)
    题解 DTOJ #1515.三塔合一
    题解 DTOJ #2305.Bazarek
    【code】Splay 模板
    寻找乱序数组中第K大的数
  • 原文地址:https://www.cnblogs.com/CSunShine/p/11974735.html
Copyright © 2011-2022 走看看