zoukankan      html  css  js  c++  java
  • scala学习 组合与继承

    1.总述

    组合:一个类可以包含另一个类的引用,利用这个被引用的类来帮助他完成任务。

    继承:子类与超类的关系

    2.抽象类

    修饰符abstract 表明该类可以拥有那些没有实现的抽象成员,因为不能直接实例化一个抽象类。

    注:一个方法只要没实现,那么它就是抽象的

    3.无参方法

    无参方法,又可称为空圆括号方法,主要针对没有参数且只通过读取所在对象字段的方式访问可变状态的情况下。举例如下:

    abstract class Element{
        def contents : Array[String]
        def height : Int = contents.length
        def width : Int = if (height == 0) 0 else contents(0).length
    }
    
    abstract class Element{
        def contents : Array[String]
        val height =    contents.length
        val width = if (height == 0) 0 else contents(0).length
    }
    

    从使用方来看,这两组定义基本等价。将二者进行对比:

    1.字段访问可能比方法调用略快,字段预先计算,方法调用时重新计算

    2.字段需要每个Element对象分配额外空间

    符合统一访问原则 : 可以使用空括号重写无参方法,也可以在调用某个不需要入参的方法时省去空括号

    4.拓展类

    A extends B

    继承主要特点:

    超类的所有成员也是子类的成员,除以下两种情况外:

    1.超类的私有成员并不会被子类继承

    2.子类实现了相同名称和参数成员,那么该成员不会被继承

    子类型的意思是子类的值可以被用在任何需要超类的值的场合

    5.重写

    Scala中字段和方法同属于一个命名空间。因此Scala禁止在同一个类中使用相同名称命名的字段和方法。

    java的命名空间:

    字段 方法 类型 包

    Scala的命名空间

    值(字段 方法 包 单例对象)

    类型(类 特质名)

    6.定义参数化字段(将参数与字段合并)

    class ArrayElement (val contents:Array[String]) extends Element
    

    举例而言:

    class Cat { val dangerous = false}
    class Tiger (
    	override val dangerous:Boolean
       private var age:Int
    ) extends Cat
    
    class Tiger(param1:Boolean, param2:Int) extends Cat{
       override val dangerous = param1
       private var age = param2
    }
    

    7.override "脆弱基类"

    8.多态 动态绑定

    实际被调用的方法实现是在运行时基于对象的类来决定的

    9.final成员

    在成员前加上fianl标识符,不会被子类继承

  • 相关阅读:
    Django 的 CSRF 保护机制
    uni横向滑动
    uni模板
    下载excel文件,链接,通过按钮点击创建a标签实现
    vue去除input输入框空格适用于搜索查询框
    整理个人笔记Linux的一些常用命令
    简单概括一下JAVA中的ANT的配置
    谈谈JavaIO System对IO的三种支持
    JAVA使用类库对数组和各种Collection容器进行排序
    c语言自行设计矩形类构造函数
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/12738509.html
Copyright © 2011-2022 走看看