Scala no solo tiene el concepto de métodos abstractos, sino también el concepto de propiedades abstractas.
Atributo abstracto : Un atributo que se declara sin valor inicial.
Método abstracto : un método se declara sin un cuerpo de método.
Las clases abstractas pueden tener no solo propiedades abstractas y métodos abstractos, sino también propiedades no abstractas y métodos no abstractos.
object Scala01_Abstract {
def main(args: Array[String]): Unit = {
val stu = new Student01
println(stu.name)
println(stu.age)
stu.sleep()
stu.eat()
}
}
// 抽象类中既可以有抽象属性和抽象方法,也可以有非抽象属性和非抽象方法
abstract class Person01 {
// 抽象属性,声明却不赋值
var name: String
// 抽象方法,声明却没有方法体
def eat(): Unit
// 非抽象属性
val age: Int = 18
// 非抽象方法
def sleep() {
println("Person sleep")
}
}
// 子类继承抽象类
class Student01 extends Person01 {
// 重写抽象属性和抽象方法,可以不加override
var name: String = "Li Ming"
def eat(): Unit = {
println("Student eat")
}
// 重写非抽象属性和非抽象方法,必须加override
// 重写的非抽象属性必须是由val修饰的
override val age: Int = 21
override def sleep(): Unit = {
println("Student sleep")
}
}
Nota:
- Cuando una subclase anula el método abstracto y la propiedad abstracta de la clase principal, se puede omitir la palabra clave anular .
- Cuando la subclase reemplaza los métodos no abstractos y las propiedades no abstractas de la clase principal, la palabra clave override no se puede omitir .
- Cuando una subclase anula un atributo no abstracto, el atributo debe decorarse con val.