V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
andybest
V2EX  ›  问与答

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

  •  
  •   andybest · 2014-01-13 03:20:50 +08:00 · 2126 次点击
    这是一个创建于 3973 天前的主题,其中的信息可能已经有所发展或是发生改变。
    //父类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 条回复    1970-01-01 08:00:00 +08:00
    cxe2v
        1
    cxe2v  
       2014-01-13 09:26:59 +08:00   ❤️ 1
    再重载一个构造方法,然后将原来的构造函数去调用你重载的这个,比如说重载一个
    Public A():this(int i){}
    this(int i)里面的代码会在原构造方法之前执行
    andybest
        2
    andybest  
    OP
       2014-01-13 10:16:25 +08:00
    @cxe2v 谢谢,我不太明白,在哪里 “重载一个构造方法” ?

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

    Public A(int i)//这里就是上面的this(int i)
    {//你想要先于原构造方法执行的代码}
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1076 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:48 · PVG 03:48 · LAX 11:48 · JFK 14:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.