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. iptables command 常用命令列表

    命令 -A, --append 范例 iptables -A INPUT ... 说明 新增规则到某个规则链中,该规则将会成为规则链中的最后一条规则. 命令 -D, --delete 范例 iptab ...

  2. TP5 在模板读出Session值

    模板取值: <p class="info">后台登录中心{$Request.session.username}</p> 也可以 {$Think.sessio ...

  3. Mule ESB 自带例子hello初体验

    1 配置的流的效果图 2 应用配置文件hello.xml内容 <?xml version="1.0" encoding="UTF-8"?> < ...

  4. Innodb_large_prefix

    innodb_large_prefix Prefixes, defined by the length attribute, can be up to 767 bytes long for InnoD ...

  5. 2019-9-2-C#命令行解析工具

    title author date CreateTime categories C#命令行解析工具 lindexi 2019-09-02 12:57:37 +0800 2018-2-13 17:23: ...

  6. 关于react的redux的知识点

    项目小的时候我们getState()进行管理数据,只有当数据庞大的时候我们采用Redux来进行管理. Redux: ①:它是专注于状态管理的库,和React是解耦的 ②:它是单向数据流,单一的状态 ③ ...

  7. webpack 命令

    --content-base <file/directory/url/port>:内容的路径. --quiet: 在控制台不输出任何内容 --no-info: 抑制无聊的信息 --colo ...

  8. 爬虫工程师的unidbg入门教程

    现在很多的app使用了so加密,以后会越来越多.爬虫工程师可能会直接逆向app,看java代码,完成java层的算法破解,但是如果遇到so该怎么办呢?可能你会直接破解so,但是真的会有很多爬虫工程师会 ...

  9. 微信群打卡机器人XiaoV项目开源 | 蔡培培的独立博客

    原文首发于蔡培培的独立博客.原文链接<微信群打卡机器人XiaoV项目开源>. 5月21日,在米花(后面" 亚里士多德式友谊"专题会提及)的影响下,决定搞个私人运动群,拉 ...

  10. java环境所遇问题

    在javac能运行通过并且生成了.class文件但是java文件在运行时通不过出现上面图片情况,试了一上午发现我的和别人好像不一样,下面展示我的情况, 之前用户变量那里新建了一个classpath,不 ...