Scala 中的类继承之 父类带有构造参数

父类class China(var name){}

子类class Japan extends China(name="son"){} 注意: 我们查看Scala文件编译后的class文件,然后再通过反编译为Java文件可以看到以下代码: 在Japan的默认构造中调用了父类的带参数的构造方法。

public Japan()

  {
    super("son");

  }

如果我们想在Japan中定义和父类相同的属性(覆盖override)则需要注意父类 属性的参数的修饰符必须为val (var 也不行), 否者会报错,在Scala中属性覆盖针对不易变的属性,子类必须加上 override val XXX: Tpye

修改父类:class China(val name: String){}

修改子类:class Japan(override val name: String) extends China(name="XX") 这里父类上的参数必须加上,否者编译不通,如果不想赋值则可以:Chian(name) 直接这样也可以


总结:

     Scala的语言设计的初衷就是少写代码,仔细想想,如果父类中有了非val的属性,我们的子类直接就可以在创建对象的时候,默认的构造中可以传入对应的属性值,并且使用该对象也可以访问的到,所以针对于非val的属性没必要override(脱裤子放屁---多此一举),而val修饰符在编译后的JAVA文件中是final修饰 是最终变量不可变,所以该值在子类中想引用这个变量并且想改变他的值,则需要override val,想想Scala这样设计也是挺合理的

扫描二维码关注公众号,回复: 1688571 查看本文章





猜你喜欢

转载自blog.csdn.net/qq_29499107/article/details/80732989