构造函数

  • 主构造函数如果不加val 和var ,只是构造传参而已,不属于类变量
class Demo(name: String)➜  sbt_demo javap -p Demo
Compiled from "Demo.scala"
public class Demo {public Demo(java.lang.String);
}
  • 加了var 和val类型的主构造变量会升级为私有变量。同时生成一个公开的访问方法。而且val 的变量是final,var不是。
class Demo(name: String, var age: Int, val home: String)➜  sbt_demo javap -p Demo*
Compiled from "Demo.scala"
public class Demo {private int age;public int age();public void age_$eq(int);private final java.lang.String home;public java.lang.String home();public Demo(java.lang.String, int, java.lang.String);
}
  • 成员变量写在主构造方法里和类里面在可见性和可变性上没有区别,唯一的区别在于构造函数
class Demo(name: String) {var age: Int = 0val home: String = "ok"
}➜  sbt_demo javap -p  Demo*
Compiled from "Demo.scala"
public class Demo {private int age;public int age();public void age_$eq(int);private final java.lang.String home;public java.lang.String home();public Demo(java.lang.String);
}

trait

  • trait不能有构造函数
trait people(name:String)  // error
trait people(val name:String) // error
trait people(var name:String) // error
trait people{name:String} // error
trait people{val name:String} // right
trait people{var name:String} // right

trait的继承

  • 普通的类继承trait,主构造函数不能作为接口的实现.但是抽象类和样例类可以
  • var 类型的变量可以被 val类型的变量覆盖。反之不行
trait people {val name: Stringvar age: Int
}case class son(name: String, age: Int) extends people // right
abstract class son(name: String, age: Int) extends people // right
class son(name: String, age: Int) extends people // error
class son(val name: String, var age: Int) extends people // right
class son(val name: String, val age: Int) extends people // right
class son(var name: String, val age: Int) extends people // error

abstract class

  • 样例类,抽象类,普通类继承抽象类,抽象类的主构造函数可以被覆盖
abstract class people(home: String) {val name: Stringvar age: Int
}case class son(name: String, age: Int, home: String) extends people(home) // right
abstract class son(name: String, age: Int, home: String) extends people(home) // right
class son(val name: String, var age: Int, home: String) extends people(home) // right
  • 只有样例类覆盖后,才能对外可见.其他的可见性,继承者和被继承着保持一致
abstract class people(var home: String) {val name: Stringvar age: Int
}case class son(name: String, age: Int, override var home: String) extends people(home) // right
abstract class son(name: String, age: Int, home: String) extends people(home) // right
class son(val name: String, var age: Int, home: String) extends people(home) // right

scala trait ,abstract class,case class,class 的一些琐碎注意事项,仅针对3.0以下相关推荐

  1. Scala Trait 详解(实例)

    Trait基础 在Scala中,Trait是一种特殊概念.首先,Trait可以被作为接口来使用,此时Trait与Java的接口非常类似.同时在Trait可以定义抽象方法,其与抽象类中的抽象方法一样,不 ...

  2. Scala Trait详解

    为什么80%的码农都做不了架构师?>>>    除了从父类集成代码外,Scala中的类还允许从一个或者多个traits中导入代码. 对于Java程序员来说理解traits的最好方法就 ...

  3. scala 样例类(case class) + 模式匹配代码示例

    package com.zxl/*** @description:* @author: zhangxueliang* @create: 2021-04-28 16:54* @version: 1.0* ...

  4. scala trait

    /*** 特质(interface)就是对应的java中的接口* 在Scala中特质中可以定义有实现的方法,也可以定义没有实现的方法*/ trait ScalaTrait {/*** 可以只定义接口, ...

  5. scala Trait及其与抽象类的比较

    概念 1 类似java的接口 2与抽象class没啥区别,除了关键字 3子类可以继承1个trait,关键字extends 4子类也可以继承多个trait,不过需要使用with关键字 class继承单个 ...

  6. Scala中 class和case class的区别

    在Scala中存在case class,它其实就是一个普通的class.但是它又和普通的class略有区别,如下: 1.初始化的时候可以不用new,当然你也可以加上,普通类一定需要加new: scal ...

  7. scala中json与case class对象的转换, spark读取es json转换成case class

    ilinux_one scala中json与对象的转换 遇到的问题 因为要把spark从es读出来的json数据转换为对象,开始想用case class定义类型,通过fastjson做转换.如下 复制 ...

  8. mysql update case when和where之间的注意事项

    在日常开发中由于业务逻辑较为复杂,常常需要用到UPDATE和CASE...WHEN...THEN...ELSE...END一起做一些复杂的更新.有时候因为对这几个字句理解得不透彻会带来很大的困扰.因此 ...

  9. Apache MiNa 2 学习笔记

    http://blog.csdn.net/cgwcgw_/article/details/18402769 http://download.csdn.net/detail/xiaozhu_1986/2 ...

最新文章

  1. 隔空作画,握拳清屏,这个手部跟踪项目火了,在线可玩
  2. Leetcode 169.多数元素 (每日一题 20210715)
  3. 《JAVA程序设计》_第四周学习总结
  4. oralce 笔记
  5. DM8168 新三板系统启动
  6. 算法设计与分析——递归与分治策略——线性时间选择
  7. JSP 活动元素 <jsp:directive.pageimport=“zero.space.ch03.Bookbean“/> 解读
  8. java 11:数组作为函数参数,数组做为函数返回值
  9. 第四讲 构建安全的Microsoft ASP.NET 应用的最佳实践和技术
  10. 使用OpenCV-python识别图片视频中的人脸和眼睛
  11. linux raid5卷,Linux逻辑卷及RAID5的创建
  12. Dell笔记本周期性闪屏故障
  13. Win10系统更新显卡驱动无限蓝屏重启-驱动人生解决方案
  14. 批量删除微博的js代码
  15. 有点干货 | Jdk1.8新特性实战篇(41个案例)
  16. 批量下载人像图片的技巧,POCO相册图片如何下载的方法
  17. 【POJ No. 1986】 距离查询 Distance Queries
  18. RGB 转 edp 接口dp501 示范电路
  19. 华为云搭建web服务器(WordPress)
  20. 1028 迪杰斯特拉算法

热门文章

  1. 吴海燕C语言真题,基于APP的智能婴儿床系统的设计与实现开题报告
  2. GKCTF2020 逆向部分题的复现
  3. WSL2中 使用jupyter lab
  4. JSON树转换成线性列表(python)
  5. 纸浆暴力反弹——复制去年走势,铁矿石认购2-4倍,双硅价差再度翘尾?2022.6.28
  6. 论如何把自己变成卡通人物(OpenCV制作卡通化头像)
  7. android qq协议分析工具,分析Androidqq协议之收到qq群消息
  8. 如何清除windowsoffice KMS激活
  9. 月模拟题3 201609-3 炉石传说
  10. PSAM卡之常用APDU指令错误码【转】