1 类

1.1 定义一个简单的类

1.2 field的getter 和 setter方法

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

  // ---------------------- 自定义类 和 属性 get  set方法-------------------------------------------------
/* class HelloWorld {
var name="zm" // 自动生成get set方法, 如果属性是private 那么生成的get set方法也是private
val 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 Man
println(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 Man
println(man.name)
man.updateName("liang")
println(man.name)*/ // 生成java风格的 get set方法 感觉没必要
/*import scala.reflect.BeanProperty
class Student{
@BeanProperty var name:String =_
class Student(@BeanProperty var name: String)
}
val s = new Student
s.setName("leo")
println(s.getName())*/

1.3 constructor介绍

1.4 内部类介绍

  // 辅助构造函数  类似 java的构造器
/* class Person{
var name = ""
var age = 0
def 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.ArrayBuffer
class Class {
class Student(val name: String) {}
val students = new ArrayBuffer[Student]
def getStudent(name: String) = { // 理解为新生报到
new Student(name)
}
} val c1 = new Class
val 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 = 2
println("this is object Person consutror")
def getEyes = eyes
}
println(Person.getEyes)*/ // 伴生类和伴生对象 class类和class同名的object对象并定义在同一个 .scala文件中,那么彼此是对方的伴生类好伴生对象
// 特点是互相可以访问对方的private field属性
/* object Person {
private val eyeNum = 2
def getEyeNum = eyeNum
} class Person(name:String="zm", age:Int=32) {
def sayHello = println(name + " | " + age + " have " + Person.getEyeNum + " eyes") // 使用伴生类的私有属性
} val person = new Person
person.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 = 32
def getName = name
}
class Student extends Person {
private var score = "A"
override val age = 34 // 子类可以覆盖父类 val的变量
def getScore = score
override def getName = "Hi, I'm " + super.getName
}*/ // 父类对象 指向了子类实例, 然后父类对象又想转换为子类 如果对象是null,则isInstanceOf一定返回false,asInstanceOf一定返回null
/* c
var p:Person = new Student
if(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 Person
class Student extends Person
val p:Person = new Student p 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

Scala基础知识笔记2的更多相关文章

  1. Scala基础知识笔记1

    上一篇文章介绍了如何下载scala, 因为在官网上点击下载按钮无法下载, 下面介绍scala的基础语法: 1 scala和java的关系 Scala是基于jvm的一门编程语言,Scala的代码最终会经 ...

  2. JS基础知识笔记

    2020-04-15 JS基础知识笔记 // new Boolean()传入的值与if判断一样 var test=new Boolean(); console.log(test); // false ...

  3. Java多线程基础知识笔记(持续更新)

    多线程基础知识笔记 一.线程 1.基本概念 程序(program):是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 进程(process):是程序的一次执行过程,或是 ...

  4. javascript基础知识笔记-自用

    笔记内容根据个人基础知识不足不明白之处做的记录.主要看的:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript 1.变量,变量的名字又叫标识符 ...

  5. Mysql之基础知识笔记

    Mysql数据库基础知识个人笔记 连接本地数据库: mysql -h localhost -u root -p 回车输入数据库密码 数据库的基础操作: 查看当前所有的数据库:show database ...

  6. java基础知识-笔记整理

    1.查看已安装jdk文件路径 CMD输入java -verbose.   2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...

  7. scala 基础知识总结

    在最开始处引入 log 相关的 包 import org.apache.log4j.{Logger,Level} 在需要屏蔽日志输出的地方加上这两行代码 // 屏蔽不必要的日志显示在终端上 Logge ...

  8. JavaScript基础知识笔记

    做前端几年了,一直疏于整理归纳,所以这两天把基础看了一遍,加上使用经验,整理了基础知识中关键技术,旨在系统性的学习和备忘.如果发现错误,请留言提示,谢谢! 重要说明:本文只列举基础知识点,中级和高级内 ...

  9. Scala基础知识[一]

    摘要:在Scala 是 Scalable Language 的简写,是一门多范式(multi-paradigm)的编程语言.设计初衷是要集成面向对象编程和函数式编程的各种特性.Scala 运行在Jav ...

随机推荐

  1. 深入学习c++--重新审视auto

    1. auto推断变量类型 2. auto遍历 3. 自定义类可使用auto

  2. STM32 以太网学习

    STM32进行以太网通信,需要  了解一下内容: 硬件层:MAC控制器  和  PHY 和 变压器 . 软件层:网络协议栈,例如:lwip协议栈,RL-TCPnet协议栈,FreeRTOS-TCP协议 ...

  3. Docker 学习笔记 (一)Dockerfile 创建本地镜像

    一.测试环境 OS version: CentOS Linux release 7.5.1804 (Core) docker cluster : master 1 + data node 4 dock ...

  4. 用js实现导出功能将html中的table导出为excel

    /** * 描述:导出表格对应的excel文件 * 时间:2018-03-29 * 作者:任恩远 * 调用示例: * onclick = "tableToExcel(tableId,file ...

  5. 嵌入式C语言自我修养 11:有一种函数,叫内建函数

    11.1 什么是内建函数 内建函数,顾名思义,就是编译器内部实现的函数.这些函数跟关键字一样,可以直接使用,无须像标准库函数那样,要 #include 对应的头文件才能使用. 内建函数的函数命名,通常 ...

  6. A1070

    给出总价和需求量,求最大收益. 思路:求单价最高的,排序. #include<cstdio> #include<algorithm> using namespace std; ...

  7. C语言程序设计:现代方法(第2版)第三章全部习题答案

    前言 本人在通过<C语言程序设计:现代方法(第2版)>自学C语言时,发现国内并没有该书完整的课后习题答案,所以就想把自己在学习过程中所做出的答案分享出来,以供大家参考.这些答案是本人自己解 ...

  8. MongoDB分片介绍

    本文简单介绍MongoDB的分片功能,对分片进行了概述,具体的功能详解,后续文章会陆续推出 分片是把数据分配到多个服务器上的一种方式,MongoDB使用分片实现大数据部署以及高吞吐操作. 大数据以及高 ...

  9. GD32F20x系列使用问题总结

    GD单片机近几年越来越火了,既有他自身相比与ST的价格优势,也有支持国货的信仰加成.然而一个新的东西,或者说一个相对较新的东西,在使用的友好性和资料的完整性方面还有很长的路要走. 现将个人使用过程中碰 ...

  10. 20155202张旭 2016-2017-2 《Java程序设计》第2周学习总结

    20155202张旭 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 第一,二章知识小节: git log 命令来查看 :提交历史 查看当前所处位置: pwd ...