本篇文章主要讲解下 Scala 中类 的继承,与方法/参数 重载等问题。
结合上面内容划分如下
1.Scala 类的继承
2.类的继承权限变更
3.类继承的注意事项
4.重写变量
5.重写方法/final
1.Scala 类的继承
scala 类的继承 与 Java 的继承并没有多大的区别
都是使用 extend 关键字
下面给出一个基本的继承例子 :
package classDefined
import javax.print.attribute.standard.JobOriginatingUserName
/**
* Created by szh on 2018/12/6.
*/
class ClassOrigin5(val userName: Option[String] = None) {
}
class ClassExtend5(userName: Option[String]) extends ClassOrigin5 {
override def toString: String = {
this.userName.getOrElse(" ")
}
}
object ClassDefined14 extends App {
val d = new ClassExtend5(Option("zz"))
println(d.toString)
}
2.类的继承权限变更
scala 权限基本没有发生变化。
声明为 继承类
1.var 能访问,仍为 var
2.val 能访问,仍为val
3.private val / var 不能访问
4.未使用限定符,实际为 private val / var 不能访问
下面给出一个示例:
package classDefined
/**
* Created by szh on 2018/12/6.
*/
class ClassOrigin5(val userName: Option[String] = None, var tmpName: String, var password: String, private val own: String, kk: String) {
def this(userName: Option[String]) {
this(userName, "Empty", "Empty", "---", "---")
}
}
class ClassExtend5(userName: Option[String]) extends ClassOrigin5(userName: Option[String]) {
override def toString: String = {
var stringBuffer = new StringBuffer()
stringBuffer.append(this.userName.getOrElse(" ")).append(" ")
stringBuffer.append(this.tmpName).append(" ")
stringBuffer.append(this.password).append(" ")
//stringBuffer.append(this.own).append(" ")
//stringBuffer.append(this.kk).append(" ")
stringBuffer.toString
}
}
object ClassDefined14 extends App {
val d = new ClassExtend5(Option("zz"))
println(d.toString)
}
3.类继承的注意事项
类的继承,有一些注意事项,尤其是在 属性重载这块。下面列举下需要注意的地方。
4.重写方法 / 重写变量
重写方法,重写变量的示例:
package classDefined
/**
* Created by szh on 2018/12/6.
*/
class ClassOrigin5(val userName: Option[String] = None, var tmpName: String, val password: String, private val own: String, kk: String) {
def this(userName: Option[String]) {
this(userName, "Empty", "Empty", "---", "---")
}
}
class ClassExtend5(userName: Option[String]) extends ClassOrigin5(userName: Option[String]) {
override val password:String = "NoEmpty"
override def toString: String = {
var stringBuffer = new StringBuffer()
stringBuffer.append(this.userName.getOrElse(" ")).append(" ")
stringBuffer.append(this.tmpName).append(" ")
stringBuffer.append(this.password).append(" ")
//stringBuffer.append(this.own).append(" ")
//stringBuffer.append(this.kk).append(" ")
stringBuffer.toString
}
}
object ClassDefined14 extends App {
val d = new ClassExtend5(Option("zz"))
println(d.toString)
}
5.重写方法 / final
普通的方法重载没有过的多需要注意的地方,在这里就不做介绍了
这里我们主要注意的是 final 的修饰符,增加final 修饰符的话,在子类中不能重载,案例如下:
package classDefined
/**
* Created by szh on 2018/12/6.
*/
class ClassOrigin6(val userName: Option[String] = None, var tmpName: String, val password: String, private val own: String, kk: String) {
def this(userName: Option[String]) {
this(userName, "Empty", "Empty", "---", "---")
}
def speakEnglish(): Unit = {
println(s"hello ")
}
}
class ClassExtend6(userName: Option[String]) extends ClassOrigin6(userName: Option[String]) {
override val password: String = "NoEmpty"
override final def speakEnglish(): Unit = super.speakEnglish()
override def toString: String = {
var stringBuffer = new StringBuffer()
stringBuffer.append(this.userName.getOrElse(" ")).append(" ")
stringBuffer.append(this.tmpName).append(" ")
stringBuffer.append(this.password).append(" ")
//stringBuffer.append(this.own).append(" ")
//stringBuffer.append(this.kk).append(" ")
stringBuffer.toString
}
}
class ClassExtendExtend6(userName: Option[String]) extends ClassExtend6(userName: Option[String]) {
// override def speakEnglish(): Unit = {
// println("cc")
// }
}
object ClassDefined15 extends App {
val d = new ClassExtendExtend6(Option("pppp"))
println(d.toString)
}