Scala坑六(抽象类)

本文深入探讨Scala中的抽象类、特质及单例对象等核心概念。详细介绍了抽象类的使用方法,特质如何实现多重继承并提供具体实现,以及apply方法在类与单例对象中的不同作用。此外还讲解了Scala包的基本概念及其可见性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址为: Scala坑六(抽象类)

1.抽象类(abstract class)

类的一个或者多个方法没有完整的定义

声明方法时只需要不写方法体,不需要关键字

子类重写父类的抽象方法时不需要加override

父类可以声明抽象字段(没有初始值的字段)

子类重写父类抽象字段时不需要加override

class Test3 {

}

abstract class Person{
def speak
val name : String
var age : Int
}
class Student extends Person{
def speak{
println("speak!!")
}

var age = 100
val name = "ahaha"
}
object Test3 extends App{
var s = new Student;
s.speak
print (s.name + ":" + s.age)
}

2.trait 特质 对比下JAVA8的借口

可以理解为包含具体实现的借口

   字段和行为的集合

混入类中,第一个要用extends 

通过with关键字,一个类可以扩展多个特质

带有特质的对象

特质从左到右被构造

trait Logger{
def log(msg:String)
}
trait ConsoleLogger extends Logger{
def log(msg : String){
println(msg)
}
}
class loggerImpl extends ConsoleLogger{
def test{
log("aaa")
}
}

trait ConsoleLogger{
def log(msg : String){
println("sava money" + msg)
}
}
trait MessageLogger extends ConsoleLogger{
override def log(msg : String){
println("sava money to bank" + msg)
}
}
abstract class Account{
def save
}
class MyAcconunt extends Account with ConsoleLogger{
def save{
log("100")
}
}
object Test3 extends App{
val a = new MyAcconunt with MessageLogger //带有特质的对象
a.save
}

class loggerImpl extends ConsoleLogger{
def test{
log("aaa")
}
}


2.apply方法和单例对象

class Test4 {

}
object Test4 extends App{
val a = ApplyText() //类名+括号调用的是object中的apply方法
a.test
val b = new ApplyTest//对象+括号调用的是类中的apply方法
println(b())
}

class ApplyTest{
def apply() = "APPLY"
def test{
println("test")
}
}

//object 里面的方法相当于静态方法
object ApplyText{ //本身就是一个单例
def apply()= new ApplyTest
def static{
println("mmm a static method")
}
}

3.包

    可串联   package com.aaa{

//在这个层次不能看的bbb的成员

package.bbb{

}

}

顶部标记  package com.b

  package b

包对象  把公有的东西放在同一个包里面

包可见性

package aa.bb.cc.dd

class XXX{

private[dd] def as = {} //只能在dd包以下能使用

}

包在任何地方引入

重命名成员 import  java.unil.(HashMap => JavaHashMap)

隐藏包  (hashMap => _)

自动引入 java.lang._






转载请注明本文地址: Scala坑六(抽象类)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值