zoukankan      html  css  js  c++  java
  • Scala类的层级关系


    一:介绍
    在Scala里面每个类都继承自通用的名为Any的超类,因为每个子类都是Any的子类,所有定义在Any中的方法就是共同的方法,它可以被任何对象调用,Nothing是所有其它类的子类。


    二:Scala的类层级

    Any类中包括以下方法
      def equals(that: Any): Boolean
      def hashCode(): Int
      def toString(): String
      def getClass(): Class[_]
      final def ==(that: Any): Boolean
      final def != (that: Any): Boolean
      final def ##(): Int
      def isInstanceOf[T0]: Boolean
      def asInstanceOf[T0]: T0

    也就是说Scala里的每个对象都可以调用== !=或equals等函数,但是由于个别函数是final修饰的,所以不能被重写。

    Any类有两个子类,AnyVal和AnyRef。

    AnyVal是Scala里每个内建值类的父类。有9个这样的值类:Byte,Short,Char,Int,Long,FLoat,Double,Boolean和Unit。其中前8个都是对应到Java的基本类型,由于这些类的实例都是写成字面量,所以不能使用new创造这些类的实例,Unit对应的大约就是Java的void类型,没有返回值。

    值类不是其它类的子类,但是不同的值类之间可以隐士互相转换,需要时可以将Int类型转换成Long类型。
    隐士转换还用来为值类型添加更多的功能,比如Int的max,min等,是Scala.Int类中没有的函数,是Scala.RichInt中的。这就是Scala.Int到Scala.RichInt的隐士转换。

    AnyRef是Scala里面所有引用类的基类,也就是Java中Object的别名。

    在Scala中,==和equasl是相同的,都是比较值,而在Java中==是比较的引用。
    例如:
      /**
      * 定义的方法
      * @param x Int
      * @param y Int
      * @return Boolean
      */
      def isequal(x:Int,y:Int) = x == y

      /**
      * 函数字面量的形式
      */
      val iseq = (x:Any,y:Any) => x == y

      输出都是true。

    但是Scala中也提供了判断引用相等的函数,就是eq 和Java的==功能相同,对用的反义词是ne。
    例如:

      val t = new String("abc")
      val t2 = new String("abc")
      print(t eq t2)

    答案是false。

  • 相关阅读:
    职场中如何沟通 15条技巧现在学
    白领丽人:这六行盛产“钻石王老五”
    个人创业融资中的八大法律问题
    [转帖]用心领导先于理性管理
    职场中牢固人际关系的三十六计
    创业:如何制定最佳融资决策
    工作中如何演绎好你的职场情绪
    怎么成为一个成功的人
    创业不得不看:华商富豪们的成功哲学
    一流简历的10大关注项
  • 原文地址:https://www.cnblogs.com/lyr999736/p/11172266.html
Copyright © 2011-2022 走看看