1.1继承类

  • 使用extends关键字,在定义中给出子类需要而超类没有的字段和方法,或者重写超类的方法。
class Person  {
var name = "zhangsan"
}
class Employee extends Person{
var salary = 0.0
def description = "员工姓名:" + name + " 薪水:" + salary
}

  

1.2重写方法

  • 重写一个非抽象方法需要override修饰符,调用超类的方法,使用super关键字。
class Person {
var name = ""
override def toString = getClass.getName + "[name=" + name + "]"
} class Employee extends Person {
var salary = 0.0
override def toString = super.toString + "[salary=" + salary + "]"
}

  

1.3类型检查和转换

  • 用isInstanceOf方法,测试某个对象是否属于某个给定的类型。
  • 用asInstanceOf方法将引用转换为子类的引用。classOf获取对象的类名。
scala> a.isInstanceOf[String]
<console>:23: warning: fruitless type test: a value of type Array[String] cannot also be a String (the underlying of String)
a.isInstanceOf[String]
^
res59: Boolean = false
scala> 4.isInstanceOf[Double]
res64: Boolean = false scala> 3.asInstanceOf[Float]
res63: Float = 3.0

  

1.4超类的构造

类有一个主构器和任意数量的辅助构造器,而每个辅助构造器都必须以对先前定义的辅助构造器或主构造器的调用开始。子类的辅助构造器最终都会调用主构造器,

  • 只有主构造器可以调用超类的构造器。辅助构造器不可能直接调用超类的构造器。
  • 在Scala的构造器中,你不能调用super(params)。

1.5 重名字段

  • 子类改写父类或者抽象父类的字段
class Person1(val name:String,var age:Int){
println("主构造器已经被调用")
val school="五道口职业技术学院"
def sleep="8 hours"
override def toString="我的学校是:" + school + "我的名字和年龄是:" + name + "," + age
} class Person2(name:String, age:Int) extends Person1(name, age){
override val school: String = "清华大学"
} scala> val a=new Person2("a",11)
主构造器已经被调用
a: Person2 = 我的学校是:清华大学我的名字和年龄是:a,11

  注:1)def只能重写另一个def 
               2)val只能重写另一个val或不带参数的def 
               3)var只能重写另一个抽象的var

1.6 抽象类

  • abstract关键字标记不能被实例化的类。
  • 方法不用标记abstract,只要省掉方法体即可。
  • 类可以拥有抽象字段,抽象字段就是没有初始值的字段。
abstract class Person(val pname: String) {//抽象类
val id: Int
var name: String
def idString: Int//抽象方法
} class Employee(pname: String) extends Person(pname) {
val id = 5;
var name = ">>>"
def idString = pname.hashCode
}

  注:子类实现抽象方法不需要override

1.7 单例对象

对象是一个只有一个实例的类,被引用时会被懒惰地创建,就像懒惰的value一样。作为顶级值,对象是单例。

作为封闭类的成员或者本地值,它的行为和val完全相同。

  • 定义单个对象

对象是一个值。对象的定义看上去像一个类,但使用关键字object

object Box

这是一个带有方法的对象的示例:

object Logger { def info(message: String): Unit = println(s"INFO: $message") }

  该方法info可以从程序中的任何位置导入。像这样创建实用程序方法是单例对象的常见用例。

如何info在另一个包中使用,如下:

import lab13.Logger.info

class Project(name: String, daysToComplete: Int)
class Test {
val project1 = new Project("TPS Reports", 1)
val project2 = new Project("Website redesign", 5)
info("Created projects")
}

  info由于import语句,该方法是可见的import lab13.Logger.info然后导入需要导入符号的“稳定路径”,对象是稳定路径。

Scala实践8的更多相关文章

  1. Scala实践14

    1.Scala的future 创建future import scala.concurrent._ import ExecutionContext.Implicits.global object Fu ...

  2. Scala实践13

    1.隐式参数 方法可以具有隐式参数列表,由参数列表开头的implicit关键字标记.如果该参数列表中的参数没有像往常一样传递,Scala将查看它是否可以获得正确类型的隐式值,如果可以,则自动传递. S ...

  3. Scala实践12

    1.内部类和抽象类型成员作为对象成员 内部类 在Scala中,可以让类将其他类作为成员.这些内部类是封闭类的成员.在Scala中,这样的内部类绑定到外部对象.假设希望编译器在编译时阻止我们混合哪些节点 ...

  4. Scala实践11

    1.1泛型类 泛型类是将类型作为参数的类.它们对集合类特别有用. 定义泛类型:泛型类将类型作为方括号内的参数[].一种惯例是使用字母A作为类型参数标识符,但是可以使用任何参数名称. class Sta ...

  5. Scala实践10

    1.模式匹配 模式匹配是一种根据模式检查值的机制.它是switch(Java中语句)的更强大版本,它同样可以用来代替一系列if / else语句. 句法 匹配表达式具有值,match关键字和至少一个c ...

  6. Scala实践9

    1.特征 Traits用于在类之间共享接口和字段.它们类似于Java 8的接口.类和对象可以扩展特征,但是特征不能被实例化,因此没有参数. 定义一个特征 最小特征只是关键字trait和标识符: tra ...

  7. Scala实践6

    1  if表达式 Scala中if...else..表达式是有返回值的,如果if和else返回值类型不一样,则返回Any类型. scala> val a3=10 a3: Int = 10 sca ...

  8. Scala实践7

    一.类 1.1简单类和无参方法 类的定义通过class关键字实现 scala> class Dog { | private var leg = 4 | def shout(content: St ...

  9. Scala实践5

    一.Scala的层级 1.1类层级 Scala中,Any是所其他类的超类,在底端定义了一些有趣的类NULL和Nothing,是所有其他类的子类. 根类Any有两个子类:AnyVal和AnyRef.其中 ...

随机推荐

  1. Codeforces Round #186 (Div. 2)

    A. Ilya and Bank Account 模拟. B. Ilya and Queries 前缀和. C. Ilya and Matrix 考虑每个元素的贡献. 边长为\(2^n\)时,贡献为最 ...

  2. Spring Security 中的 Bcrypt

    最近在写用户管理相关的微服务,其中比较重要的问题是如何保存用户的密码,加盐哈希是一种常见的做法.知乎上有个问题大家可以先读一下: 加盐密码保存的最通用方法是? 对于每个用户的密码,都应该使用独一无二的 ...

  3. python基础四之列表

    列表详解 列表的增删改查! 增加 li = ['zxc', 'is', 'a'] # append 在列表结尾整体添加 修改列表,但是没有返回值 li.append('boy') print(li) ...

  4. Java发送邮件Demo

    就是个Demo,有使用Spring的东西 package xxxxxxx.common.utils; import org.springframework.mail.javamail.JavaMail ...

  5. linux scull 代码write 方法

    write, 象 read, 可以传送少于要求的数据, 根据返回值的下列规则: 如果值等于 count, 要求的字节数已被传送. 如果正值, 但是小于 count, 只有部分数据被传送. 程序最可能重 ...

  6. 2019-8-31-git-通过-SublimeMerge-处理冲突

    title author date CreateTime categories git 通过 SublimeMerge 处理冲突 lindexi 2019-08-31 16:55:59 +0800 2 ...

  7. P1053 第K小的取法

    题目描述 给定一个含n个数的数组.现在从中取出一些数.并把这些数相加得出一个和,如果有多种取法的和相同,则视为多种取法.求所有取法对应的和中第K小的和. 输入格式 第一行包括两个正整数n(n<= ...

  8. JS的防抖与节流学习笔记

    防抖(debounce):当持续触发事件时,在一定的时间段内,只有最后一次触发的事件才会执行. 例: function debounce(fn, wait) { var timer = null; r ...

  9. 【52.55%】【BZOJ 4520】K远点对

    Time Limit: 30 Sec  Memory Limit: 512 MB Submit: 588  Solved: 309 [Submit][Status][Discuss] Descript ...

  10. JavaSE基础知识---常用对象API之String类

    一.String类 Java中用String类对字符串进行了对象的封装,这样的好处在于对象封装后可以定义N多属性和行为,就可以对字符串这种常见的数据进行方便的操作. 格式:(1)String s1 = ...