如何在 Scala 中访问子 class 实例中的超级 class 字段?
How to access super class fields in a child class instance in scala?
我创建了一个抽象 class(动物),其中包含一些具体的字段和方法 implementations.I 创建了两个子 classes(狗和猫)扩展了抽象 class 并覆盖 super class.When 的字段 我正在尝试访问 super class 的字段 我遇到编译错误并且我无法获取 super class 字段的值。
我尝试在 Cat class 的子 class 实例中使用 super 关键字来获取 Animal super class 的年龄,但没有成功。
def superPrnt{println(super.age)}
compilation error:
/home/jdoodle.scala:32: error: super may not be used on variable age
def superPrnt{println(super.age)}
^
one error found
Command exited with non-zero status 1
我是不是做错了什么,如果是的话,在 Scala 中访问子 class 实例中的超级 class 字段值的正确方法是什么?
object MyClass {
def main(args: Array[String]) {
val dog=new Dog("s")
dog.sayHello
println(dog)
val cat =new Cat("nancy")
cat.sayHello
println(cat)
cat.superPrnt
//cat.age=12
//cat.greeting="nhj"
//println(cat)
}
abstract class Animal() {
val greeting:String="boo"
var age:Int=5
def sayHello{println(greeting)}
override def toString=s"I say $greeting and i am $age years old"
}
class Dog(name:String) extends Animal {
override val greeting="woof"
age=2
}
class Cat(name:String) extends Animal{
override val greeting="meow"
age=4
def superPrnt{println(super.age)}
}
}
尝试将 var
设为 def
并用覆盖替换重新赋值。
abstract class Animal() {
val greeting:String="boo"
def age:Int=5
def sayHello{println(greeting)}
override def toString=s"I say $greeting and i am $age years old"
}
class Dog(name:String) extends Animal {
override val greeting="woof"
override def age=2
}
class Cat(name:String) extends Animal{
override val greeting="meow"
override def age=4
def superPrnt{println(super.age)}
}
我创建了一个抽象 class(动物),其中包含一些具体的字段和方法 implementations.I 创建了两个子 classes(狗和猫)扩展了抽象 class 并覆盖 super class.When 的字段 我正在尝试访问 super class 的字段 我遇到编译错误并且我无法获取 super class 字段的值。
我尝试在 Cat class 的子 class 实例中使用 super 关键字来获取 Animal super class 的年龄,但没有成功。
def superPrnt{println(super.age)}
compilation error:
/home/jdoodle.scala:32: error: super may not be used on variable age
def superPrnt{println(super.age)}
^
one error found
Command exited with non-zero status 1
我是不是做错了什么,如果是的话,在 Scala 中访问子 class 实例中的超级 class 字段值的正确方法是什么?
object MyClass {
def main(args: Array[String]) {
val dog=new Dog("s")
dog.sayHello
println(dog)
val cat =new Cat("nancy")
cat.sayHello
println(cat)
cat.superPrnt
//cat.age=12
//cat.greeting="nhj"
//println(cat)
}
abstract class Animal() {
val greeting:String="boo"
var age:Int=5
def sayHello{println(greeting)}
override def toString=s"I say $greeting and i am $age years old"
}
class Dog(name:String) extends Animal {
override val greeting="woof"
age=2
}
class Cat(name:String) extends Animal{
override val greeting="meow"
age=4
def superPrnt{println(super.age)}
}
}
尝试将 var
设为 def
并用覆盖替换重新赋值。
abstract class Animal() {
val greeting:String="boo"
def age:Int=5
def sayHello{println(greeting)}
override def toString=s"I say $greeting and i am $age years old"
}
class Dog(name:String) extends Animal {
override val greeting="woof"
override def age=2
}
class Cat(name:String) extends Animal{
override val greeting="meow"
override def age=4
def superPrnt{println(super.age)}
}