Scala 覆写字段快速入门|学习笔记

简介: 快速学习 Scala 覆写字段快速入门。

开发者学堂课程【Scala 核心编程-基础Scala 覆写字段快速入门】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/8976


Scala 覆写字段快速入门

 

案例:创建一个类型为 class 的文件名为 ScalaFilledoverride 写入:

package com. atguigu. chapter07. myextends

object ScalaFiledoverride {

def main(args: Array[String]): Unit = {

}

class AAA{

val age : Int= 10

}

class BBB extends AAA {

override val age : Int= 20

}

在 scala 里面要求覆写一个字段,或者有一个子类的字段跟它一模一样时必须写 override,否则报错。

创建两个对象实例,都是 B 的实例,一个交给 A 一个交给 B,看各个对象的 age 值:

Val obj1 :AAA= new BBB

Val obj2 : BBB= new BBB

println(" obj1.age="+ obj1.age +” \t obj2.age= ”+ obj2.age)

}

执行:

D: \program\jdk8\bin\java

obj1.age=20| obj2.age=20

Process finished with exit code 0

会发现两个都是20,而不是一个是10,一个是20.

因为:

val age : Int= 10会生成 public age()

override val age : Int= 20会生成 public age()

也就是下面的方法把上面的覆盖掉了,看起来好像是字段的覆写,本质是方法的覆写。

println(" obj1.age="+ obj1.age +” \t obj2.age= ”+ obj2.age) 这里 obj1.age 调用了 obj1.age(),obj2.age 看起来是访问了 obj2.age()

但是,虽然 obj1是父类的引用,但是有动态绑定机制,指向的内存地址是 BBB,所以调用的是 BBB 里面的 age。

如果就是想访问父类的 age,那么就自己写一个方法,让它继承去访问。

打开源代码:

public class AAA

private final intr age = 10;

public int age() { return this.age; }

}

AAA 里面有 age 方法。

public class BBB extends AAA

private final int age = 20:

public int age() { return this.age; }

BBB 里面也有 age 方法,相当于覆写了,所以在调用的时候一直调用的是 age(),那么就会返回20.

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