在Scala中扩展类的方式和Java一样都是使用extends关键字
十多年的金湾网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都营销网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整金湾建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“金湾网站设计”,“金湾网站推广”以来,每个客户项目都认真落实执行。
可以把类声明为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
}
}