1 类

1.1 定义一个简单的类

1.2 field的getter 和 setter方法

感觉成员变量定义成  var 属性名=属性值即可,  不需要定义成 val 或者 private就行,

  // ---------------------- 自定义类 和 属性 get  set方法-------------------------------------------------/* class HelloWorld {var  name="zm" // 自动生成get set方法, 如果属性是private 那么生成的get set方法也是privateval  age = 32  // val类型的成员变量只提供get方法 不提供set方法 比如调用  对象.age=34会报错def sayHello(name:String) {println("hi: " + name)}def getName = name}val hello = new HelloWorld//println(hello.getName) // 如果定义的方法没有括号 那么调用时也不能带括号//println(hello.sayHello("ping"))//println(hello.name) get方法获取属性值//hello.name="ping"  set方法设置属性值// println(hello.name)println(hello.age)// hello.age=34 // 编译报错//hello.love
*/// 自定义 属性的 get set方法  Scala的getter和setter方法的命名与java是不同的,是field和field_=的方式/*class Man{private var  myname = "zm"def name = "you name is" +  myname  // get方法def name_=(value:String) {  // 自定义 private类型的属性的 set方法  其中 _=固定写法并且前后不能有空格print("you cannot edit your name!!!")}}/*  val man = new Manprintln(man.name) // 调用属性 get方法man.name="liang" // 调用属性 set方法 */// 属性是private类型的成员变量 自定义 set方法来修改属性值class Man{private var  myname = "zm"def name = "you name is" +  myname  // get方法def updateName(value:String) {  // 自定义 private类型的属性的set方法myname = value}}val man = new Manprintln(man.name)man.updateName("liang")println(man.name)*/// 生成java风格的 get set方法  感觉没必要/*import scala.reflect.BeanPropertyclass Student{@BeanProperty var name:String =_class Student(@BeanProperty var name: String)}val s = new Students.setName("leo")println(s.getName())*/

1.3 constructor介绍

1.4 内部类介绍

  // 辅助构造函数  类似 java的构造器
/*  class Person{var name = ""var age = 0def this(name:String) {this()this.name = name}def this(name:String, age:Int) {this(name:String)this.age = age}}var person = new Person("zm",34)println(person.name)println(person.age)*/// 主构造函数  就是在类名括号里定义 构造函数需要的形参的写法
/*  class Person(val name: String, val age: Int) {println(name + " | " + age)}var person = new Person("zm",32)*/// 内部类
  import scala.collection.mutable.ArrayBufferclass Class {class Student(val name: String) {}val students = new ArrayBuffer[Student]def getStudent(name: String) =  { // 理解为新生报到new Student(name)}}val c1 = new Classval s1 = c1.getStudent("leo")c1.students += s1

1.5 object 静态类-继承-枚举-object的apply方法

// object  相当于静态类  存放静态field 和 method 工具方法  不能定义接受参数的constructor// object内部不在method内的代码就是 object的constructor  object的constructor只会在其第一次调用时执行一次
/*  object Person{private var eyes = 2println("this is object Person consutror")def getEyes = eyes}println(Person.getEyes)*/// 伴生类和伴生对象  class类和class同名的object对象并定义在同一个 .scala文件中,那么彼此是对方的伴生类好伴生对象// 特点是互相可以访问对方的private field属性/* object Person {private val eyeNum = 2def getEyeNum = eyeNum}class Person(name:String="zm", age:Int=32) {def sayHello = println(name + " | " + age + " have " + Person.getEyeNum + " eyes") // 使用伴生类的私有属性}val person = new Personperson.sayHello*/// objectjic 继承 抽象类
/*  abstract  class Hello(var name:String="zm", var age:Int=32) {def sayHello(name:String):Unit}object Person extends Hello("zm",34) {override def sayHello(name: String) {println("hello " + name )}}Person.sayHello("liang")*/// object的重要方法 apply// 通常在伴生对象中实现apply方法,并实现构造伴生类的对象的功能,而且创建时通常不使用new Class的方式,使用Class()的方式// 隐士调用伴生对象的apply方法, 让代码更简洁 eg:  val a = Array(1,2,3)  Array类的伴生对象的apply方法就实现了接收可变数量的参数,并创建一个Array对象的功能// 自定义 伴生类和伴生对象和 apply
/* class Person(var name:String){}object Person {def apply(name:String): Unit = {new Person(name)}}*/// 必须定义在 object的main函数写法
/*  object HelloWorld {def main (args: Array[String]){println("hello world")}}*/// scalac xx.scala   scala xxx 编译和运行// 使用object实现枚举// Scala没有直接提供类似于Java中的Enum这样的枚举特性,需要用object继承Enumeration类,并且调用Value方法来初始化枚举值
/*  object Season extends Enumeration {val SPRING = Value(0, "spring")  // 索引位置 索引值val SUMMER = Value(1, "summer")val AUTUMN = Value(2, "autumn")val WINTER = Value(3, "winter")}println(Season(0)) // 得到 spring这个value的值println(Season.withName("spring"))  // 得到 spring//for (ele <- Season.values) println(ele)for(c<-Season.values) println(c)*/

继承之  override  super  isInstanceof  asInstanceof  模式匹配判断对象类型

 // 继承中  子类覆盖父类方法 必须使用 override   子类调用父类被覆盖的方法使用 super 关键字/* class Person {private var name = "leo"val age = 32def getName = name}class Student extends Person {private var score = "A"override val age = 34 // 子类可以覆盖父类 val的变量def getScore = scoreoverride def getName = "Hi, I'm " + super.getName}*/// 父类对象 指向了子类实例,  然后父类对象又想转换为子类  如果对象是null,则isInstanceOf一定返回false,asInstanceOf一定返回null/* cvar p:Person = new Studentif(p.isInstanceOf[Student]) { // 如果是子类类型//println("p is student")var s:Student = p.asInstanceOf[Student] // 那么强转成子类类型println( p.getClass ) // class com.beijing.App$Student    得到类实例的真实类信息println( classOf[Person] ) // class com.beijing.App$Person*/// 使用模式匹配 判断对象类型
/*  class Personclass Student extends Personval p:Person = new Studentp match {case one:Person => println("i am the Person type")case _ =>   println("i am unknown type")}*/

继承之子类父类构造函数

  // 子类调用父类的constructor 1 每个类可以有一个主constructor 和任意多个辅助constructor, 而每个辅助constructor第一行// 都必须是调用主constructor或者其他辅助constructor, 也就是子类的辅助构造函数第一行是一定不可能调用主类的构造函数的// 2 只能在子类的主构造函数中调用父类的构造函数, 如果是父类中接收的参数,比如name和age,子类中接收时,就不要用任何val或var来修饰了,否则会认为是子类要覆盖父类的field
/* class Person(name:String, age:Int)class Student(name:String, age:Int, var sex:Int) extends Person(name, age) {def this(name:String) {// 辅助构造函数调用主构造函数this(name,0,0)}def this(age:Int,name:String) {// 第一行 调用其他辅助构造函数this(name)}}*/

继承之 匿名内部类 抽象类

// 匿名内部类 定义没有名称的子类并直接创建对象,将创建的对象赋予一个变量, 以及可以将该对象传递给其他函数
/*  class Person(val name:String) { // 定义原始类def sayHello = "hello, i am " + name}val p = new Person("zm") { // 匿名内部类需要覆盖主类的方法  因为匿名内部类相当于主类的子类override def sayHello = "hello, i am" + name}def greeting(p:Person) { // 普通传参println(p.sayHello)}def greeting1(p:Person{def sayHello:String}) { // 普通传参println(p.sayHello)}greeting1(p)*/// 抽象类 抽象方法 抽象属性  子类在继承过来之后 这些类方法属性都不需要override

转载于:https://www.cnblogs.com/chengjianxiaoxue/p/10181786.html

Scala基础知识笔记2相关推荐

  1. access2013数据库实验笔记_医学科研实验基础知识笔记(十):甲基化

    往期回顾 医学科研实验基础知识笔记(一):细胞增殖 医学科研实验基础知识笔记(二):细胞凋亡检测 医学科研实验基础知识笔记(三):细胞周期检测 医学科研实验基础知识笔记(四):细胞自噬研究策略 医学科 ...

  2. 23篇大数据系列(二)scala基础知识全集(史上最全,建议收藏)

    作者简介: 蓝桥签约作者.大数据&Python领域优质创作者.管理多个大数据技术群,帮助大学生就业和初级程序员解决工作难题. 我的使命与愿景:持续稳定输出,赋能中国技术社区蓬勃发展! 大数据系 ...

  3. Java基础知识笔记-11_2-Swing用户界面组件

    Java基础知识笔记-11_2-Swing用户界面组件 这章教程两个版本,一个语法是非lambda表达式版本,另一个是lambda表达式版本 非lambda表达式版本 1 Java Swing概述 J ...

  4. 6-DoF问题相关基础知识笔记

    6-DoF问题相关基础知识笔记 一.什么是6-DoF,即6个自由度是什么? 二.PnP算法 三.BOP挑战与官方数据集简介 BOP数据集 BOP toolkit BOP挑战的介绍页面 四.相关论文 C ...

  5. 二代测序之SNV基础知识笔记总结

    二代测序之SNV基础知识笔记总结 文章目录 二代测序之SNV基础知识笔记总结 SNV基础知识 SNVs Mutation vs. Variant[变异和突变] 不同层次的突变 DNA: 1.编码DNA ...

  6. b站唐老师人工智能基础知识笔记

    b站唐老师人工智能基础知识笔记 0.机器学习(常用科学计算库的使用)基础定位.目标定位 1.机器学习概述 1.1.人工智能概述 1.2.人工智能发展历程 1.3.人工智能主要分支 1.4.机器学习工作 ...

  7. python详细基础知识笔记

    详细基础知识笔记 注: ·第一章 学习准备 1.1高级语言.机器语言.汇编语言 1.2 汇编.解释 1.3 静态语言.脚本语言 1.4 Python的历史 1.5 Python语言的优点.缺点 1.6 ...

  8. HTML基础知识笔记(0基础入门)

    HTML&CSS基础知识笔记 HTML 一.HTML介绍 二.实体 三.meta标签 四.语义化标签(一) 五.语义化标签(二) 六.语义化标签(三) 七.列表 八.超链接 九.图片标签 十. ...

  9. Unity3D基础知识笔记

    Unity3D基础知识笔记 一.Unity简介 1)Unity3D概念 2)Unity3D的特点 二.Unity3D的发展历史 三.软件安装 一.Unity简介 1)Unity3D概念 Unity是由 ...

最新文章

  1. html文字绕图文字置顶,如何实现html文字绕排
  2. 支持javascript的ppt软件_github重磅推荐!一个很好用的PPT生成工具
  3. 专访中科创达王璠:怎样做好嵌入式人工智能的算法开发?
  4. 使用Apache CXF进行Web服务学习
  5. 每个Java开发者应该知道(并爱上)的8个工具
  6. 大数据框架Storm的介绍
  7. 格式转换------用C#代码生成一个简单的PDF文件
  8. 数学建模——更新1——excel箱线图
  9. python调用sqlldr_sqlldr用法
  10. maya2018 + VS2017 C++编译环境搭建
  11. S3(Simple Storage Service) 对象存储 详细介绍
  12. 电信获取光猫超级密码
  13. 校招——2021多益网络软件开发笔试和面试
  14. selenium怎样定位web动态提示语
  15. 大疆网上测评题库_大疆校招笔试题及参考(一个小编程题)
  16. ValueError: Length mismatch: Expected axis has 2 elements, new values have 1 elements
  17. 回归本心QwQ背包问题luogu1776
  18. 02 从亚马逊的实践,谈分布式系统的难点
  19. 浅谈全局视角下的设计模式
  20. 在Windows平台监视英伟达(Nvidia)显卡性能

热门文章

  1. web前端试题和答案
  2. java f.add()_f.add(p1,First); 那个“First”是什么意思呀?
  3. android qq分享自动弹出,史上最详细Android集成QQ,微信,微博分享(不要第三方)持续更新中...
  4. vue中用table_Ant-Design-Vue中关于Table组件的使用
  5. oracle 重建em失败,11gr2 EM重建出现问题,求高人指点
  6. bccomp在php中什么意思,PHP bccomp()用法及代码示例
  7. 5M1E,软件质量管理最佳解决方案
  8. Windows API的时间结构体、时间转换及时间获取
  9. 长春市计算机学校老照片,松江这所学校一百年啦!一组老照片回忆曾经的旧时光…...
  10. 第四范式“金融范”系列分享会第二期开课:人工智能强化金融风控