andybest
V2EX  ›  问与答

Java 匿名子类如何让代码在其父类构造方法之前被执行?

  •  
  •   andybest · Jan 13, 2014 · 2548 views
    This topic created in 4516 days ago, the information mentioned may be changed or developed.
    //父类A
    public class A {
    public A (){
    System.out.println("父类A构造方法执行!");
    }
    }

    -------------------------------------------------
    测试代码:
    A a = new A(){ //此行不能改
    //失败方法1:
    //public A (){ ... //语法错误,这里不能覆盖构造方法

    //失败方法2:
    //{
    // System.out.println("无效,仍然是父类构造方法先被执行");
    //}
    }

    有没任何可能在 A a = new A(){ ... } 这个中间实现代码在A构造方法之前被执行?
    5 replies    1970-01-01 08:00:00 +08:00
    cxe2v
        1
    cxe2v  
       Jan 13, 2014   ❤️ 1
    再重载一个构造方法,然后将原来的构造函数去调用你重载的这个,比如说重载一个
    Public A():this(int i){}
    this(int i)里面的代码会在原构造方法之前执行
    andybest
        2
    andybest  
    OP
       Jan 13, 2014
    @cxe2v 谢谢,我不太明白,在哪里 “重载一个构造方法” ?

    能否帖下大概的代码?谢谢!
    plucury
        3
    plucury  
       Jan 13, 2014
    恩,我专门试了一下应该是可以的。你需要在父类中用一个构造代码块去调用方法f。然后在创建匿名内部类中去重写这个方法就可以了。
    https://gist.github.com/59cf6689a6494be6e1cf.git
    cxe2v
        5
    cxe2v  
       Jan 13, 2014
    Class A
    {
    Public A():this(int i)
    {//原构造方法}

    Public A(int i)//这里就是上面的this(int i)
    {//你想要先于原构造方法执行的代码}
    }
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4287 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 05:26 · PVG 13:26 · LAX 22:26 · JFK 01:26
    ♥ Do have faith in what you're doing.