scala trait ,abstract class,case class,class 的一些琐碎注意事项,仅针对3.0以下
构造函数
- 主构造函数如果不加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以下相关推荐
- Scala Trait 详解(实例)
Trait基础 在Scala中,Trait是一种特殊概念.首先,Trait可以被作为接口来使用,此时Trait与Java的接口非常类似.同时在Trait可以定义抽象方法,其与抽象类中的抽象方法一样,不 ...
- Scala Trait详解
为什么80%的码农都做不了架构师?>>> 除了从父类集成代码外,Scala中的类还允许从一个或者多个traits中导入代码. 对于Java程序员来说理解traits的最好方法就 ...
- scala 样例类(case class) + 模式匹配代码示例
package com.zxl/*** @description:* @author: zhangxueliang* @create: 2021-04-28 16:54* @version: 1.0* ...
- scala trait
/*** 特质(interface)就是对应的java中的接口* 在Scala中特质中可以定义有实现的方法,也可以定义没有实现的方法*/ trait ScalaTrait {/*** 可以只定义接口, ...
- scala Trait及其与抽象类的比较
概念 1 类似java的接口 2与抽象class没啥区别,除了关键字 3子类可以继承1个trait,关键字extends 4子类也可以继承多个trait,不过需要使用with关键字 class继承单个 ...
- Scala中 class和case class的区别
在Scala中存在case class,它其实就是一个普通的class.但是它又和普通的class略有区别,如下: 1.初始化的时候可以不用new,当然你也可以加上,普通类一定需要加new: scal ...
- scala中json与case class对象的转换, spark读取es json转换成case class
ilinux_one scala中json与对象的转换 遇到的问题 因为要把spark从es读出来的json数据转换为对象,开始想用case class定义类型,通过fastjson做转换.如下 复制 ...
- mysql update case when和where之间的注意事项
在日常开发中由于业务逻辑较为复杂,常常需要用到UPDATE和CASE...WHEN...THEN...ELSE...END一起做一些复杂的更新.有时候因为对这几个字句理解得不透彻会带来很大的困扰.因此 ...
- Apache MiNa 2 学习笔记
http://blog.csdn.net/cgwcgw_/article/details/18402769 http://download.csdn.net/detail/xiaozhu_1986/2 ...
最新文章
- 隔空作画,握拳清屏,这个手部跟踪项目火了,在线可玩
- Leetcode 169.多数元素 (每日一题 20210715)
- 《JAVA程序设计》_第四周学习总结
- oralce 笔记
- DM8168 新三板系统启动
- 算法设计与分析——递归与分治策略——线性时间选择
- JSP 活动元素 <jsp:directive.pageimport=“zero.space.ch03.Bookbean“/> 解读
- java 11:数组作为函数参数,数组做为函数返回值
- 第四讲 构建安全的Microsoft ASP.NET 应用的最佳实践和技术
- 使用OpenCV-python识别图片视频中的人脸和眼睛
- linux raid5卷,Linux逻辑卷及RAID5的创建
- Dell笔记本周期性闪屏故障
- Win10系统更新显卡驱动无限蓝屏重启-驱动人生解决方案
- 批量删除微博的js代码
- 有点干货 | Jdk1.8新特性实战篇(41个案例)
- 批量下载人像图片的技巧,POCO相册图片如何下载的方法
- 【POJ No. 1986】 距离查询 Distance Queries
- RGB 转 edp 接口dp501 示范电路
- 华为云搭建web服务器(WordPress)
- 1028 迪杰斯特拉算法
热门文章
- 吴海燕C语言真题,基于APP的智能婴儿床系统的设计与实现开题报告
- GKCTF2020 逆向部分题的复现
- WSL2中 使用jupyter lab
- JSON树转换成线性列表(python)
- 纸浆暴力反弹——复制去年走势,铁矿石认购2-4倍,双硅价差再度翘尾?2022.6.28
- 论如何把自己变成卡通人物(OpenCV制作卡通化头像)
- android qq协议分析工具,分析Androidqq协议之收到qq群消息
- 如何清除windowsoffice KMS激活
- 月模拟题3 201609-3 炉石传说
- PSAM卡之常用APDU指令错误码【转】