gpt4 book ai didi

scala - 通过一组构造函数传递参数的问题

转载 作者:行者123 更新时间:2023-12-04 23:07:54 24 4
gpt4 key购买 nike

我的问题是关于 scala 继承细节。我有以下代码。

package scalasandbox

object Main {
def main(args: Array[String]): Unit = {
val creature: Creature = new Human("First")
creature.rename("Second")
creature.introduce
}
}

class Creature(var name: String) {
def introduce = println("I'm creature: " + name)

def rename(newName: String) = {
println("Creature was renamed to: " + newName)
name = newName
}
}

class Human(name: String) extends Creature(name) {
override def introduce = println("I'm Human: " + name)
}

产生以下输出
Creature was renamed to: Second
I'm human: First

我希望它是“我是人类:第二”,因为重命名方法应该改变字段值。我用反编译器打开了 Human 类:
package scalasandbox;

import scala.Predef.;
import scala.ScalaObject;
import scala.collection.mutable.StringBuilder;
import scala.reflect.ScalaSignature;

@ScalaSignature(bytes="\006\001\0212A!\001\002\001\013\t)\001*^7b]*\t1!\001\007tG\006d\027m]1oI\n|\007p\001\001\024\007\0011!\002\005\002\b\0215\t!!\003\002\n\005\tA1I]3biV\024X\r\005\002\f\0355\tABC\001\016\003\025\0318-\0317b\023\tyABA\006TG\006d\027m\0242kK\016$\b\002C\t\001\005\003\005\013\021\002\n\002\t9\fW.\032\t\003'Yq!a\003\013\n\005Ua\021A\002)sK\022,g-\003\002\0301\t11\013\036:j]\036T!!\006\007\t\013i\001A\021A\016\002\rqJg.\033;?)\taR\004\005\002\b\001!)\021#\007a\001%!)q\004\001C!A\005I\021N\034;s_\022,8-Z\013\002CA\0211BI\005\003G1\021A!\0268ji\002")
public class Human extends Creature
implements ScalaObject
{
private final String name;

public void introduce()
{
Predef..MODULE$.println(new StringBuilder().append("I'm Human: ").append(this.name).toString());
}

public Human(String name)
{
super(name);
}
}

并查看“私有(private)最终字符串名称;”那里。我认为它隐藏了生物名称字段。和
Predef..MODULE$.println(new StringBuilder().append("I'm Human: ").append(this.name).toString());

由于“this.name”而不是方法调用“this.name()”,这些东西看起来也很可疑。谁能解释我的错误在哪里以及实现这两个类的正确方法是什么?

最佳答案

name您在 Human 中使用的变量类解析为 Human 的构造函数参数, Scala 将自动为您在构造函数之外使用的构造函数参数创建私有(private) val。这对你来说是不幸的。您可以防止这种情况,例如通过在 Human 中命名您的参数不同,例如nm :

class Human(nm: String) extends Creature(nm)

关于scala - 通过一组构造函数传递参数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6596789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com