【发布时间】:2014-11-07 22:49:09
【问题描述】:
我是 Scala 新手(来自 Ruby 世界)。
我对 Scala 中的“特征”概念很好奇(如果我理解正确的话,它应该类似于 ruby 中的模块)。
这是一个用例。
假设我有一个名为User 的类定义如下:
class User {
def password() : String = "generating a password (default)"
}
假设我有一个特征SecurePasswords,我想使用它“覆盖”User 类中定义的密码方法。
trait SecurePasswords {
def password() : String = "generating a secure password (non-default)"
}
而且,假设我希望它适用于 User 类的实例,而不是整个类本身。
val a = new User
val b = new User with SecurePasswords
a.password() # generating a password (default)
b.password() # generating a secure password (non-default)
现在这是我期望的理想输出,但是,我得到了不同的错误,例如“anonymous class inherits conflicting members ... (Note: this can be resolved declaring etc etc ...)”
这可以在 Scala 中完成还是我要求太多/做了一些非常奇怪的事情?
是否可以不使用任何其他类定义,例如 UserWithSecurePassword extends User
提前谢谢大家!
P.S 如果您想知道“为什么?”,只需假设系统将包含许多需要密码(并且可能还需要安全密码)的实体,因此该特征可以在很多地方使用。
【问题讨论】:
标签: java scala inheritance overriding traits