高手指点一下

chllcy 2007-02-03 03:20:55
由于读的英文版的thinking in java所以导致有些地方读的不是很懂,有些误解
希望高手帮我解开困惑 谢谢!!

问一下
abstract class Base {
public Base(int i) {
System.out.println("Base constructor, i = " + i);
}
public abstract void f();
}

public class AnonymousConstructor {
private static Test monitor = new Test();
public static Base getBase(int i) {
return new Base(i) {
{//这个括号内是不是它的构造函数,里面的super.Base();加与不加一样,首先都要调用基类的构造函数?匿名类的构造函数只能有一个?
System.out.println("Inside instance initializer");
}
public void f() {
System.out.println("In anonymous f()");
}
};
}
public static void main(String[] args) {
Base base = getBase(47);
base.f();
monitor.expect(new String[] {
"Base constructor, i = 47",
"Inside instance initializer",
"In anonymous f()"
});
}
}


谢谢大家了!
...全文
313 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
szm880828 2007-02-04
  • 打赏
  • 举报
回复
abstract class Base {
public Base(int i) {
System.out.println("Base constructor, i = " + i);
}
public abstract void f();
}

/*这上面是个抽象类有自己的构造函数。还有一个抽象的方法。*/

public class AnonymousConstructor {
private static Test monitor = new Test();
/*这是个方法。返回类型是上面的抽象类直接在类里面return一个类*/
public static Base getBase(int i) {
return new Base(i) {
/*如果在这里面有super.Base();的话就是调用了抽象类的构造函数。就有点像继承的关系。只要你在里面有生成了一个实例对象的话就会自动掉用抽象类的构造函数。不管是什么类。只要你有生成了该类的实例就会调用构造函数。不管是匿名还是不匿名的构造函数只能在类里面有重载的出现。*/
System.out.println("Inside instance initializer");
}
public void f() {
System.out.println("In anonymous f()");
}
};
}
public static void main(String[] args) {
Base base = getBase(47);
base.f();
monitor.expect(new String[] {
"Base constructor, i = 47",
"Inside instance initializer",
"In anonymous f()"
});
}
}
「已注销」 2007-02-03
  • 打赏
  • 举报
回复
好像匿名类的执行顺讯和普通类有些区别
测试结果显示是先调用匿名类的父类的构造方法
然后才执行匿名类的非静态初始化块的
chllcy 2007-02-03
  • 打赏
  • 举报
回复
啊 郁闷 完全理解错误了......

那这个测试代码是何时被调用的呢?希望详细点 谢谢
「已注销」 2007-02-03
  • 打赏
  • 举报
回复
测试了一下
匿名没有构造方法,
你注释的部分,应该是属于非静态的初始块
你可以写多个{}

测试代码
{
System.out.println("Inside instance initializer");
}
{
System.out.println("Inside instance initializer2");

}
wushui1215 2007-02-03
  • 打赏
  • 举报
回复
匿名内部类连名字都没有 那来的构造函数啊?
扩展功能: a. 首先满足网友的”口味”, 重新设计了所有旗子, 选择新的旗盘背景, 换了一个更清爽的面. (界面配色并不是件很容易的事情, 这样的棋类游戏长时间容易使眼睛疲劳, 首先要做到选择的色彩 不刺激眼睛,其实大部分色彩都比较刺激眼睛,尤其是纯三基色(红/黄/蓝), 还要使界面做得漂亮). b. 增加”回放” 功能. 当下完旗子时,可以重新回味一下, 刚杀完的一盘旗,可以寻找不足和重新感受 一下胜利的喜悦! 这个功能比较复杂! d. 又看了一下电脑走旗, 感觉确实比较难处理, 没有高人指点写这个算法确实比较难, 应该比以前聪明 了一些, 但是还是比较笨, 打算有空去找个现在的电脑走旗组件替换上, 自己的电脑走旗算法慢慢研 究(当时是因为实在找不到现在的组件, 自己写了个较笨的,如果哪位朋友能够提供组件,在次深表感谢!!!). e. 扩展走旗的步数容量, 有些网友, 对战的都是高手, 产生数组越界, 这次从 200 扩展到了500, 当然 您还可以扩展到更大,因为源代码已经开放). f. 增加图像缓存功能. g. 解决 .net 从framework 1.0到framework 2.0升级出现的程式升级逻辑问题及一个小bug. h. 本来我只是想把这个程式放到Blog上, 供爱好c#的网友学习,一起交流一下, 没想到反应那么的强烈! 经常收到网友的反馈邮件, 从下载量看,不到一年仅从我的下载空间(不算网友转载下载次数)就有近 二万五千次. 所以又重新看懂已经基本忘记的代码,修复了bug,并扩展了以上功能. 有可能还会增加一些功能! 另外,在此对给我提交建议和bug的朋友表示感谢!!! (开发语言: C#语言) 来自:http://community.csdn.net/Expert/topic/5237/5237003.xml?temp=.4600031

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧