我是一个新手Scala程序员(之前从Ruby转过来)。
我对Scala中的“traits”概念很感兴趣(如果我理解正确的话,应该类似于Ruby中的模块)。
下面是一个使用案例。
假设我定义了一个名为User
的类:
class User {
def password() : String = "generating a password (default)"
}
假设我有一个trait 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
?提前感谢大家! 附言:如果你想知道“为什么?”只需假设系统将包含许多需要密码(可能是安全密码)的实体,因此该特征可以在许多地方使用。