scala之抽象类-abstract关键字、final、private关键字
1 Java之抽象类
abstarct class A{}
在java中,抽象类中必须有抽象的方法
,抽象类可以被继承,但是继承的同时必须重写所有的抽象方法。
abstract class A{
//必须要有抽象方法
public abstract String say(String name){
return name;
}
}
2 scala抽象类
abstarct class B{}
在scala中,抽象类有几个特点
1、抽象类是不能被实例化的,如果声明一个抽象类的实例,必须重写所有的抽象属性和抽象方法
2、abstract只能修饰class,不能修饰def
3、一旦一个类中有抽象的方法或者属性,那么这个类必须用abstract进行修饰。如def a、var name:String
4、scala抽象类中可以有已经被实现的普通方法
5、抽象类中的抽象属性和方法不能使用private、final关键字进行修饰,否则与事实相违背
- private关键字代表私有的,只能在本类中被访问,可以修饰属性、方法
- final可以修饰类、属性、方法
- 当修饰类、这个类不能被继承
- 当修饰方法、这个方法不能被重写
- 当修饰属性,这个属性不能被修改和重写
abstract class B{
//这就是抽象类的抽象的属性,还没被初始化,如果继承该抽象类,必须初始化这2个属性
var name:String
var id:Int
//这就代表抽象方法,没有方法体的方法就是抽象方法,
def say()
//这就是一个普通的方法,也可以被继承,重写,重载
def say(name:String):Unit = {sout....}
}
3 小试牛刀
package com.shufang.facetoobject
object AbstractClassDemo {
}
// 在scala中抽象类中可以没有抽象方法
abstract class AB {
//在抽象类中,抽象方法和抽象属性都不能使用private和protected关键字进行修饰,与初衷相违背
var name: String
var age: Int
def say(): Unit = {
println(".sout")
}
//抽象方法
def say1()
}
class ABS extends AB {
override var name: String = _
override var age: Int = _
//子类继承抽象类,重写抽象方法,可以省略override关键字
def say1(): Unit = super.say()
}
object Test000001 {
def main(args: Array[String]): Unit = {
//创建一个抽象类的实例,实现所有的抽象
val ab: AB = new AB {
override var name: String = _
override var age: Int = _
override def say1(): Unit = ???
}
val abs = new ABS
abs.say1()
}
}