开发者学堂课程【Scala 核心编程-基础:抽象类使用注意事项和细节】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/8980
抽象类使用注意事项和细节
目录:
一、抽象类的价值
二、抽象类的细节
一、抽象类的价值
在做开发的时候,很少有人用抽象类,用接口的比较多。觉得抽象类没有价值,但是实际上抽象类的价值更多的是在于设计。在开发中作为一个管理者,管五个程序员,五个程序员每个人都有自己编写代码的风格。管理时可以去抽象一个类,然后交给相关的开发人员,让他们用子类继承并实现。这样在一定程度上就可以去控制代码的一些规范,把控程序的一个结构。所以抽象的价值在于设计,更多是站在设计层面来使用这个抽象类。
二、抽象类的细节
1、细节1
抽象类不能实例化,跟 java 一样。java 抽象类也不能实例化。
例:
Object AbstractClassDetail01{
def main(args: Array[String]):Unit = {
//在进行实例化的时候,同时动态的将 say hello 进行实现。就相当于匿名之类。默认情况下一个抽象类是不能实例化的,但是实例化时动态的实现了抽象化的所有。
//抽象方法也可如下:
//var anlimal = new Animal03 会报错
var anlimal = new Animal03 {
override def sayHello(): Unti = {
println(
“
say hello
”
)
}
}
}
abstract class Animal03{
def sayHello()
}
2、细节2
抽象类不一定含有 abstract 方法。也就是说抽象类可以没有 abstract 方法。
写抽象类的细节描述问题。
例:先建一个 AbstractClassDetail01选择 object
Object AbstractClassDetail01{
def main(args: Array[String]):Unit = {
}
}
abstract class Animal02{
//在抽象类中可以有实现的方法
def sayHi ():Unit = {
println(
“
xxx
”
)
}
}
3、细节3
一旦类包含了抽象方法或者抽象属性,则该类必须声明为 abstract。
4、细节4
抽象方法不能有主体。
5、细节5
如果一个类继承的抽象类,则它必须实现抽象类所有抽象方法或抽象属性。
例:抽象属性
abstract class Animal03{
def sayHello()
var food:String
}
class Dog extends Animal03{
//提示错误 把光标放在 alt 后面输入alt 加 enter 键,它会提示你。
override def sayHello():Unti = {
//override 可以拿掉
println(
“
小狗汪汪叫”)
}
override var food:String=
//override 可以拿掉
}
这个时候 dog 就可以实际化了。实现了它的抽象方法和抽象属性,当然可以实际化。
6、细节6
抽象方法和抽象属性,不能用 private、 final 来修饰。因为这些关键字都跟重写或者实现相违背。假如一个方法是私有的,又是个抽象方法,谁来帮你实现,那必然是错的。
7、细节7
抽象方法可以有实现的方法
8、细节8
子类重写抽象方法不需要 override,写上也不会报错。