下面一段代码是我的测试代码
**package edu.lulu.oop.chapter6
object Test03 {
def main(args: Array[String]): Unit = {
val s = new Son(false)
println(s.married)
}
}
***// one.构造器必须声明类型***
class Father(inName:String,inAge:Int){
var name = inName
var age = inAge
var married:Boolean = _
***// one.one当构造器被调用时,会首先调用它父类的主构造器,然后会调用继续执行自己的主构造器***
println("1.这是一个父类主构造器")
println("2.父类:class{}里面的除去方法的声明,在构造器中都会被调用")
}
// two.这是一个子类的主构造器,它会隐式地调用父类主构造器
// three.它继承父类时可以把它当做新产生了一个父类对象
class Son(inGrade:Int) extends Father("wanglulu",18){
var grade = inGrade
def this(inMarried: Boolean){
// four.scala中一个主构造器,多个辅助构造器,辅助构造器必须先调用主构造器,
// 因为主构造器隐式地调用父类主构造器,调用主构造器是为了完成继承,他是父类和子类连接的桥梁
// five.scala中不可以显式的调用父类主构造器而不调用自己的主构造器
// super("wanglulu",18)
this(90)
this.married = inMarried // 只有主构造器里面声明的变量都是成员变量
var test:String= " " //辅助构造器声明的变量是局部变量
println("5.这是一个子类辅助构造器")
}
println("3.这是一个子类主构造器")
println("4.class{}里面的除去方法的声明的语句,在构造器中被调用时会被运行")
}**
紧接着是我测试代码的执行结果
1.这是一个父类主构造器
2.父类:class{}里面的除去方法的声明,在构造器中都会被调用
3.这是一个子类主构造器
4.class{}里面的除去方法的声明的语句,在构造器中被调用时会被运行
5.这是一个子类辅助构造器
false
使用jd-gui进行父类的反编译结果
package edu.lulu.oop.chapter6;
import scala.Predef.;
import scala.reflect.ScalaSignature;
@ScalaSignature(bytes="\006\001%3A!\001\002\001\027\t1a)\031;iKJT!a\001\003\002\021\rD\027\r\035;feZR!!\002\004\002\007=|\007O\003\002\b\021\005!A.\0367v\025\005I\021aA3ek\016\0011C\001\001\r!\ti\001#D\001\017\025\005y\021!B:dC2\f\027BA\t\017\005\031\te.\037*fM\"A1\003\001B\001B\003%A#\001\004j]:\013W.\032\t\003+aq!!\004\f\n\005]q\021A\002)sK\022,g-\003\002\0325\t11\013\036:j]\036T!a\006\b\t\021q\001!\021!Q\001\nu\tQ!\0338BO\026\004\"!\004\020\n\005}q!aA%oi\")\021\005\001C\001E\0051A(\0338jiz\"2aI\023'!\t!\003!D\001\003\021\025\031\002\0051\001\025\021\025a\002\0051\001\036\021\035A\003\0011A\005\002%\nAA\\1nKV\tA\003C\004,\001\001\007I\021\001\027\002\0219\fW.Z0%KF$\"!\f\031\021\0055q\023BA\030\017\005\021)f.\033;\t\017ER\023\021!a\001)\005\031\001\020J\031\t\rM\002\001\025)\003\025\003\025q\027-\\3!\021\035)\004\0011A\005\002Y\n1!Y4f+\005i\002b\002\035\001\001\004%\t!O\001\bC\036,w\fJ3r)\ti#\bC\0042o\005\005\t\031A\017\t\rq\002\001\025)\003\036\003\021\tw-\032\021\t\023y\002\001\031!a\001\n\003y\024aB7beJLW\rZ\013\002\001B\021Q\"Q\005\003\005:\021qAQ8pY\026\fg\016C\005E\001\001\007\t\031!C\001\013\006YQ.\031:sS\026$w\fJ3r)\tic\tC\0042\007\006\005\t\031\001!\t\r!\003\001\025)\003A\003!i\027M\035:jK\022\004\003")
public class Father
{
private String name;
private int age;
private boolean married;
public String name()
{
return this.name; }
public void name_$eq(String x$1) { this.name = x$1; }
public int age() { return this.age; }
public void age_$eq(int x$1) { this.age = x$1; }
public boolean married() { return this.married; }
public void married_$eq(boolean x$1) { this.married = x$1; }
public Father(String inName, int inAge)
{
this.name = inName;
this.age = inAge;
Predef..MODULE$.println("1.这是一个父类主构造器");
Predef..MODULE$.println("2.父类:class{}里面的除去方法的声明,在构造器中都会被调用");
}
}
使用jd-gui对子类进行反编译结果
package edu.lulu.oop.chapter6;
import scala.Predef.;
import scala.reflect.ScalaSignature;
@ScalaSignature(bytes="\006\001E2A!\001\002\001\027\t\0311k\0348\013\005\r!\021\001C2iCB$XM\035\034\013\005\0251\021aA8pa*\021q\001C\001\005YVdWOC\001\n\003\r)G-^\002\001'\t\001A\002\005\002\016\0355\t!!\003\002\020\005\t1a)\031;iKJD\001\"\005\001\003\002\003\006IAE\001\bS:<%/\0313f!\t\031b#D\001\025\025\005)\022!B:dC2\f\027BA\f\025\005\rIe\016\036\005\0063\001!\tAG\001\007y%t\027\016\036 \025\005ma\002CA\007\001\021\025\t\002\0041\001\023\021\035q\002\0011A\005\002}\tQa\032:bI\026,\022A\005\005\bC\001\001\r\021\"\001#\003%9'/\0313f?\022*\027\017\006\002$MA\0211\003J\005\003KQ\021A!\0268ji\"9q\005IA\001\002\004\021\022a\001=%c!1\021\006\001Q!\nI\taa\032:bI\026\004\003\"B\r\001\t\003YCCA\016-\021\025i#\0061\001/\003%Ig.T1se&,G\r\005\002\024_%\021\001\007\006\002\b\005>|G.Z1o\001")
public class Son extends Father
{
private int grade;
public int grade()
{
return this.grade; }
public void grade_$eq(int x$1) { this.grade = x$1; }
public Son(int inGrade)
{
super("wanglulu", 18);
this.grade = inGrade;
Predef..MODULE$.println("3.这是一个子类主构造器");
Predef..MODULE$.println("4.class{}里面的除去方法的声明的语句,在构造器中被调用时会被运行");
}
public Son(boolean inMarried)
{
this(90);
married_$eq(inMarried);
String test = " ";
Predef..MODULE$.println("5.这是一个子类辅助构造器");
}
}