zoukankan      html  css  js  c++  java
  • 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")
    }
    
  • 相关阅读:
    在Apache下开启SSI配置支持include shtml html和快速配置服务器
    GitHub命令精简教程
    php读取excel,以及php打包文件夹为zip文件
    Firebug中命令行栏(Commandlinie)的使用介绍和总结
    javascript判断设备类型-手机(mobile)、安卓(android)、电脑(pc)、其他(ipad/iPod/Windows)等
    jquery返回顶部-ie6配合css表达式。
    jquery.cycle.js简单用法实例
    原生javascript操作class-元素查找-元素是否存在-添加class-移除class
    常用css表达式-最小宽度-上下居中
    div模块变灰
  • 原文地址:https://www.cnblogs.com/lyr999736/p/11163438.html
Copyright © 2011-2022 走看看