大数据全系列 教程
1869个小节阅读:465.3k
目录
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
完整属性的重写:
xxxxxxxxxx
package com.itbaizhan.chapter05
//抽象属性
object AbstractField2 {
def main(args: Array[String]): Unit = {
val cat = new Cat()
println("before changeAge:"+cat.age)//2
//将2改为了3,而不是将1改为了3,age定义为var有歧义,所以age需要定义为val的。
cat.changeAge()//3
println("after changeAge:"+cat.age)//3
//TODO 4.将age的var修改为val后,以上上个结果都是2
}
abstract class Animal{
var name:String
//TODO 1.抽象类中可以定义抽象属性,也可以定义非抽象属性(也称为完整属性)
//var age:Int = 1
val age:Int = 1
def changeAge(): Unit ={
//age = 3//对属性的赋值等价于调用属性的set方法
println("inner changeAge:"+age)//对属性取值等价于调用属性的get方法
}
}
class Cat extends Animal{
//TODO 2子类重写父类的抽象属性,补充完整即可
var name:String = _
//TODO 3.子类重写父类的完整属性,必须使用override关键字修饰
//override var age:Int = 2
//编译程序抛出异常:overriding variable age in class Animal of type Int;
// variable age cannot override a mutable variable
//翻译如上提示:var的属性不能重写,需要将age该为val修饰,why?
override val age:Int = 2
}
}
实时效果反馈
1. 关于Scala类的完整属性的相关描述,错误的是:
A 抽象类中可以定义抽象属性,也可以定义非抽象属性(也称为完整属性)。
B 子类重写父类的完整属性,可以不使用override关键字修饰。
C 完整属性在抽象类必须用val定义,不能用var定义。
答案:
1=>B 子类重写父类的完整属性,必须使用override关键字修饰。