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

2014-01-13 03:20:50 +08:00
 andybest
//父类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构造方法之前被执行?
2120 次点击
所在节点    问与答
5 条回复
cxe2v
2014-01-13 09:26:59 +08:00
再重载一个构造方法,然后将原来的构造函数去调用你重载的这个,比如说重载一个
Public A():this(int i){}
this(int i)里面的代码会在原构造方法之前执行
andybest
2014-01-13 10:16:25 +08:00
@cxe2v 谢谢,我不太明白,在哪里 “重载一个构造方法” ?

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

Public A(int i)//这里就是上面的this(int i)
{//你想要先于原构造方法执行的代码}
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/96749

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX