gpt4 book ai didi

scala - 将方法重写为 Scala 中的字段

转载 作者:行者123 更新时间:2023-12-01 23:28:19 24 4
gpt4 key购买 nike

我不明白。为什么Scala支持覆盖方法作为字段:

abstract class A {
def i: Int;
}

class B extends A {
val i = 123;
}

val obj:A = new B();

println(obj.i)

方法i作为字段i。为什么?

最佳答案

查看此处发生情况的一种快速方法是编译此代码并使用 javap 检查生成的类。这里我们得到 A 的以下内容:

public abstract class A implements scala.ScalaObject {
public abstract int i();
public A();
}

对于 B(使用 -p,因此我们可以看到任何私有(private)成员):

public class B extends A implements scala.ScalaObject {
private final int i;
public int i();
public B();
}

因此,val 最终成为带有 getter 的私有(private)字段 — 很像您在惯用的 Java 中编写的内容,尽管命名约定不同(并且并不是真正的 约定,因为编译器会为您处理它)。

关于scala - 将方法重写为 Scala 中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13912600/

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