• Scala的组合与继承


    主要讲述的是Scala类的语法,包括抽象类和类的继承,组合,多态和绑定,以及一些小的知识点,重写父类的方法等。

      组合:两个类都是继承同一个父类,那么这两个类就是组合关系。

      继承:子类使用extends继承父类,那么这两个类就是继承关系。

      多态:一个父类被多个子类继承,以不同的形式展示。

      绑定:new一个子类的对象指向父类,但是该对象调用方法的时候,调用的还是子类的方法,和指向没有关系。

    /**
      * @Author:Alex_lei
      * @Description: 抽象类,类的继承和方法的重写及如何调用父类的构造器
      */
    object Abstract_class {
      def main(args: Array[String]): Unit = {
        val ae = new ArrayElement(Array("Alex","Lei"))
        ae.contents
        println(ae.height)
        println(ae.width)
    
        val le = new LineElement("1234567")
        println(le.height)
        println(le.width)
      }
    }
    
    abstract class Element{
      /**
        * 无参数方法
        * @return
        */
      def contents:Array[String]
      val height:Int = contents.length
      val Int = if(height==0) 0 else contents(0).length
    
      def demo = println("I am Element")
    }
    
    class ArrayElement(conts:Array[String]) extends Element{
      /**
        * 无参数方法
        * 重写contents方法
        * @return
        */
      override def contents: Array[String] = conts
    
      override def demo = println("I am ArrayElement")
      /**
        * 可以将父类的方法变为字段,因为scala里的字段和方法属于相同的命名空间
        */
      //val contents: Array[String] = conts
    }
    
    /**
      * 调用超类的构造器,只要简单的把要传递的参数或参数列表放在超类名之后的括号里即可
      * @param s
      */
    class LineElement(s:String) extends ArrayElement(Array(s)) {
      override val height: Int = 1
      override val  Int = s.length
    
      override def demo = println("I am LineElement")
    }
    
    object Polymorphism {
      def main(args: Array[String]): Unit = {
        /**
          * 多态就是多个子类可以继承同一个超类,以多种形式展示
          */
    
        val e1:Element = new ArrayElement(Array("Alex","Lei"))
        val e2:Element = new LineElement("ddddd")
        val e3:Element = new UniformElement('x',2,0)
    
        /**
          * 动态绑定指的是,被调用的实际方法实现取决于运行期对象基于的类
          * 这里使用demo函数测试
          */
    
        e1.demo  //I am ArrayElement
        e2.demo  //I am LineElement
        e3.demo  //I am UniformElement
    
        /**
          * 当希望一个成员不被继承的时候,我们可以使用final关键字进行修饰
          */
    
      }
    }
    
    class UniformElement(
      ch:Char,
      override val Int,
      override val height:Int) extends Element{
      private val line = ch.toString * width
      
      override def contents: Array[String] = Array(line)
      override def demo = println("I am UniformElement")
    }
    
  • 相关阅读:
    P4318 完全平方数 [二分答案+容斥+莫比乌斯函数]
    P2522 [HAOI2011]Problem b
    莫比乌斯反演学习笔记
    UVALive646 Deranged Exams [容斥+排列组合]
    HDU5514 Frogs [容斥(II)]
    P2567 [SCOI2010]幸运数字 [容斥+有技巧的搜索]
    微信api退款操作
    类中或者是程序集中,根据虚拟路径获取绝对路径
    加载程序集中内嵌资源
    .NET Framework 框架简述01
  • 原文地址:https://www.cnblogs.com/lyr999736/p/11163438.html
Copyright © 2020-2023  润新知