Rust trait多继承详解与实现方法
时间:2026-08-15 | 作者:星河游者 | 阅读:0一. 多个trait的加载顺序
实现多继承时,需要注意父子类构造器的执行顺序。
- 先父后子
- 有多个父类时,按书写顺序从左到右执行
例如:
trait A {
println("a")
}
trait B {
println("b")
}
class Class1 extends A with B {
println("class1")
}
def main(args: Array[String]): Unit = {
new Class1()
}
结果如图:
二. 多层trait的加载顺序
执行顺序很明确:先执行父类构造器,再进入子类构造器。
如果trait1本身还有自己的父类,也要先把它父类的构造器执行完。
trait A {
println("A")
}
trait BB {
println("BB")
}
trait B extends BB {
println("B")
}
trait CC {
println("CC")
}
trait C extends CC {
println("C")
}
class Class1 extends C with A with B {
println("Class1")
}
def main(args: Array[String]): Unit = {
new Class1()
}
结果如图:
三. 空指针异常
错误代码演示
import ja va.io.FileWriter
object Class24 {
// 在文件中写入日志
trait FileLogger {
// 抽象字段
val filename: String
val fileWriter = new FileWriter(filename, true)
def writeLog(msg: String): Unit = {
fileWriter.write(msg)
fileWriter.close()
}
}
class MyFileLogger extends FileLogger {
val filename = "11-26.log"
}
def main(args: Array[String]): Unit = {
val fileLogger = new MyFileLogger()
fileLogger.writeLog("今天上午上scala课程")
}
}
修改代码
lazy val fileWriter = new FileWriter(filename, true)
结果如图:
四. trait与抽象类的区别
相同点
类和trait有不少共通之处。
- 都能定义成员变量
- 无论是抽象的还是具体的都可以
- 在继承时,二者都使用extends关键字
不同点
- trait的构造器不能带参数
- trait支持多继承
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 迅捷路由器怎么调信号最强,设置时要注意什么?
- 时间:2026-08-27
-
- vivo浏览器怎么卸不掉?原因和解决方法在这里
- 时间:2026-08-27
-
- OPPO R11s黑屏了,怎么强制恢复出厂设置?
- 时间:2026-08-27
-
- 飞利浦显示器包装盒有生产日期和保修期吗?怎么看?
- 时间:2026-08-27
-
- 联想新平板开机必须联网吗?怎么做?
- 时间:2026-08-27
-
- 平板横竖屏切换设置与问题解决
- 时间:2026-08-27
-
- 移动电源容量怎么测?要准备哪些工具?
- 时间:2026-08-27
-
- 荣耀90 Pro防水吗?防水级别多少?怎么用才安全
- 时间:2026-08-27
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15