首页 > 大数据 > 数据挖掘 > 好程序员大数据教程Scala系列之继承
在Scala中扩展类的方式和Java一样都是使用extends关键字
可以把类声明为final,使之不能扩张
也可以把单个方法或者字段声明为final,以确保它不能被重写,注意和Java的不同,Java中final修饰的字段意味着不可变。
在Scala中重写一个非抽象的方法必须使用override修饰符
在子类中调用超类的方法,使用super,和Java一致。
被protected修饰的字段或者方法,可以被其子类访问;
与Java不同的是,protected修饰的成员对于类所属的包是不可见的;
protected[this],访问权限仅限当前的对象
可以使用包修饰符改变protected修饰的成员的可见性
|
|
Scala |
Java |
|
测试某个对象是否属于给定的类 |
obj.isInstanceOf[C] |
obj instanceof C |
|
强制类型转换 |
obj.asInstanceOf[C] |
(C)obj |
|
获取对象的类信息 |
classOf[C] |
C.class |
下面代码定义了一个子类和一个调用超类构造器的主构造器
class Employ(name: String, age: Int, val Salary:Double) extends Person (name,age)
下面的代码展示类的继承,以及接口的实现等
object
ClassDemo {
def
main
(args: Array[String]) {
val
h =
new
Human
println
(h.
byScala
())
}
}
//相当于Java的接口
trait
Coding{
def
byJava
(flag : Boolean): Unit ={
if
(flag)
{
println
(
"I can code by Java"
)
}
else
{
println
(
"I can't code by Java"
)
}
}
//未被实现的方法默认为抽象方法
def
byScala
(): String
}
//抽象类
abstract
class
Animal {
def
run
(): Int
val
name: String
}
class
Human
extends
Animal
with
Coding{
val
name =
"abc"
//打印几次"ABC"?
val
t1,t2,(a, b, c) = {
println
(
"ABC"
)
(
1
,
2
,
3
)
}
println
(a)
println
(t1._
1
)
//在Scala中重写一个非抽象方法必须用override修饰
override
def
byJava
(flag: Boolean): Unit = {
println
(
"Coding by Java and Scala"
)
}
def
byScala
(): String={
"coding by Scala"
}
//在子类中重写超类的抽象方法时,不需要使用override关键字,写了也可以
def
run
(): Int = {
1
}
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69913892/viewspace-2659738/ ,如需转载,请注明出处,否则将追究法律责任。