class Demo(name:String,var age:Int,val home:String)? sbt_demo javap -p Demo*
Compiled from "Demo.scala"
public class Demo {private int age;public int age();public void age_$eq(int);privatefinal java.lang.String home;public java.lang.String home();public Demo(java.lang.String, int, java.lang.String);}
成員變量寫在主構造方法里和類里面在可見性和可變性上沒有區別,唯一的區別在于構造函數
class Demo(name:String){var age:Int=0val home:String="ok"}? sbt_demo javap -p Demo*
Compiled from "Demo.scala"
public class Demo {private int age;public int age();public void age_$eq(int);privatefinal java.lang.String home;public java.lang.String home();public Demo(java.lang.String);}
trait people {val name:Stringvar age:Int}caseclass son(name:String, age:Int)extends people // rightabstractclass son(name:String, age:Int)extends people // rightclass son(name:String, age:Int)extends people // errorclass son(val name:String,var age:Int)extends people // rightclass son(val name:String,val age:Int)extends people // rightclass son(var name:String,val age:Int)extends people // error
abstract class
樣例類,抽象類,普通類繼承抽象類,抽象類的主構造函數可以被覆蓋
abstract class people(home: String){val name: Stringvar age: Int
}case class son(name: String, age: Int, home: String) extends people(home) // right
abstract class son(name: String, age: Int, home: String) extends people(home) // right
class son(val name: String, var age: Int, home: String) extends people(home) // right
只有樣例類覆蓋后,才能對外可見.其他的可見性,繼承者和被繼承著保持一致
abstract class people(var home: String){val name: Stringvar age: Int
}case class son(name: String, age: Int, override var home: String) extends people(home) // right
abstract class son(name: String, age: Int, home: String) extends people(home) // right
class son(val name: String, var age: Int, home: String) extends people(home) // right