Scala快速入门-7-继承

简介: 继承类 extends重写方法时必须用override只有主构造器可以调用超类的主构造器重写字段抽象类、字段

知识点


  • 继承类 extends
  • 重写方法时必须用override
  • 只有主构造器可以调用超类的主构造器
  • 重写字段
  • 抽象类、字段

扩展类


  • 使用extends关键字
class Employee extends Person {...}
  • 在子类中定义需要的新字段和方法,或者重写超类的方法
  • 可将类声明为final,这样就不有被扩展
  • 可将单个方法或字段声明为final,确保不能被重写
  • 在上一节中,类有一个主构造器和任意多的辅助构造器,而每个辅助构造器都必须先调用先前定义的辅助构造器或主构造器为开始,调用超类构造器的方式也同样与类的定义交织在一起
class Employee(name: String, age: Int, val salary: Double) extends Person(name, age) {
}

说明:Employee类中有三个参数:name、age和salary,其中的name和age会被传递到超类中。相当于下面的Java代码

public class Employee extends Person {
    private String name;
    private int age;
    private double salary;
    public Employee(String name, int age, double salary) {
        super(name, age);
        this.salary = salary;
    }
}

重写方法


  • 在Scala中重写一个非抽象方法必须使用override修饰符
1. class Pseron{
2.     override def toString = getClass.getName
3. }
• 在Scala中调用超类的方法用supper关键字
4. class Employee extends Pseron{
5.     override def toString = super.toString + getClass.getName
6. }

重写字段


  • 可以用另一个同名的val字段重写一个val或不带参数的def
  • 常见操作是用val重写抽象的def
abstract class Person{
    def id: Int
}
class Student(override val id: Int) extends Person
  • 重写时注意如下限制

def只能重写另一个def

val只能重写另一个val或不带参数的def

var只能重写另一个抽象的val

抽象类


  • 用abstract关键字标记的类不能被实例化
  • 抽象类通常包含某个或几个方法没有被完整定义
  • 与Java不同,不需要对抽象方法使用abstract关键字,只是省去了方法体
  • 如果某个类至少存在一个抽象方法,则该类必须声明为abstract
  • 子类中重写超类中抽象方法时,不需要使用override关键字

抽象字段


  • 抽象字段就是一个没有初始值的字段
abstract class Person{
    val id: Int
    var name: String
}
  • 具体的子类必须提供具体的字段
  • 和方法一样,在子类中重写超类中的抽象字段时,不需要override关键字
相关文章
|
Java Scala
165 Scala 继承
165 Scala 继承
38 0
|
5月前
|
Java 大数据 Scala
Scala快速入门--Scala环境搭建【Windows10】图解
Scala快速入门--Scala环境搭建【Windows10】图解
59 0
|
消息中间件 Java 大数据
Scala快速入门
Scala快速入门
101 0
|
分布式计算 Java Scala
scala面向对象编程之继承
scala使用extends关键字来实现继承。可以在子类中定义父类中没有的字段和方法,或者重写父类的方法。 示例1:实现简单继承
160 0
scala面向对象编程之继承
Scala快速入门-11-常用集合操作
所有的集合都扩展自Iterable特质 集合有三大类,分别为序列、集和映射 几乎所有集合类,Scala都同时提供了可变和不可变的版本 Scala列表要么是空的,要么拥有一头一尾,其中尾部本身又是一个表列 集是无先后次序的集合 用LinkedHashSet来保留插入顺序,或用SortedSet来按顺序进行迭代 +将元素添加到无先后次序的集合中;+:和:+向前或向后追加到序列;++将两个集合串接在一起;-和--移除元素 映射、折叠和拉链操作是很有用的技巧,用来将函数和操作应用到集合中的元素
|
安全 Java 编译器
Scala快速入门-10-模式匹配与样例类
mathch表达式是一个更好的switch,不会有穿透到下一个分支的问题 如果没有模式能够匹配,会抛出MatchError,可以用case _ 模式来避免,相当于Java中的default 模式可以包含一个随意定义的条件,称做守卫 可以匹配数组、列表、元组等模式,然后将匹配到不同部分绑定到变量 样例类及密封类的模式匹配 用Option来存放可能存在也可能不存在的值,比null更安全
Scala快速入门-9-高阶函数
作为值的函数 创建匿名函数 带函数参数的函数 闭包 柯里化
|
Java Scala
Scala快速入门-8-特质
Scala和Java一样不允许类继承多个超类,特质解决这一局限性 类可以实现任意数量的特质 当将多个特质叠加在一起时,顺序很重要,其方法先被执行的特质排在更后面 Scala特质可以提供方法和字段的实现 特质要求实现它们的类具备特定的字段、方法或超类 特质可以同时拥有抽象方法和具体方法,而类可以实现多个特质
Scala快速入门-6-单例对象及伴生对象
• 用对象作为单例或存放工具方法,Scala没有静态方法或字段 • 类可以有一个同名的伴生对象 • 对象的apply方法通常用来构造伴生类的新实例 • Scala的main函数定义 单例对象
|
Java Scala
Scala快速入门-5-类定义
每个类都有一个主构造器,这个构造器和类的定义“交织”在一起,它的参数直接成为类的字段,主构造器执行类体中所有的语句 类中的字段自动带getter和setter方法 用@BeanProperty注解生成JavaBean的getXxx/setXxx方法 辅助构造器是可选的,它们都叫做this