通过反编译来理解scala构造方法

下面一段代码是我的测试代码

**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.这是一个子类辅助构造器");
  }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值