一道Java面试的疑惑。

飞飞红 2010-07-20 10:20:55
我在看Java面试题时,有一道问题很是不解。
问题:
Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)
给出的标准答案是:
匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现

我翻来覆去的读也没弄懂。
我的理解就是:匿名类部类是以new的形式实现父类或接口,它不存在类名。
如题所说的继承与实现,到底是何种书写规格,如果没有书写规格何来此问。我也看了Java编程思想上对内部类的介绍,没提到到匿名内部类有继承与实现这一说。
不知道我的提问大家是否能看懂,如果知道的请帮我解决下心中的困扰。
...全文
140 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
coooliang 2010-07-22
  • 打赏
  • 举报
回复
应该是可以继承也可以实现接口

分!!!
coooliang 2010-07-22
  • 打赏
  • 举报
回复

public abstract class Ellipse2D extends RectangularShape {
public static class Float extends Ellipse2D implements Serializable {
public Float() {
}
public Float(float x, float y, float w, float h) {
setFrame(x, y, w, h);
}
}
}
coooliang 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dr_lou 的回复:]
Thread th = new Thread(){
public void run(){

}
};

是否算继承了Thread呢?
[/Quote]
LZ你的答案对吗?
-droidcoffee- 2010-07-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ifcheng 的回复:]
引用 9 楼 id19870510 的回复:

Java code

public class TestInnerClass {
public interface T1 {
void Test();
}

public static interface T2 {
void Test2();
}

class IImpl implements TestInnerClas…………
[/Quote]

不懂你咋理解的,反正我晕乎乎的。

我理解的是:

一个“内部类”【而不是"匿名"内部类】可以作为一个接口,由另一个【内部类】实现
thegodofwar 2010-07-20
  • 打赏
  • 举报
回复

TestInnerClass.T1 i = t.new IImpl();
i.Test();
TestInnerClass.T2 i2 = t.new IImpl2();
i2.Test2();

这种new法倒是很少见
飞飞红 2010-07-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 id19870510 的回复:]

Java code

public class TestInnerClass {
public interface T1 {
void Test();
}

public static interface T2 {
void Test2();
}

class IImpl implements TestInnerClas……
[/Quote]
那你的理解是不是:匿名内部类可以implements(实现)interface(接口)
如果是的话,我尝试了下:一个内部类可以作为一个抽象类,由另一个内部类继承。
那标准的不能继承其它类又如何理解?
thegodofwar 2010-07-20
  • 打赏
  • 举报
回复
感觉给的答案和问题对不上号呀,是不是没转述清楚,另在实践应用时完全可以用普通内部类来代替,这样有更多的发挥空间
-droidcoffee- 2010-07-20
  • 打赏
  • 举报
回复

public class TestInnerClass {
public interface T1 {
void Test();
}

public static interface T2 {
void Test2();
}

class IImpl implements TestInnerClass.T1 {

@Override
public void Test() {
System.out.println("IImpl Test");
}
}

class IImpl2 implements TestInnerClass.T2 {

@Override
public void Test2() {
System.out.println("IImp2 Test");
}
}

public static void main(String[] args) {
TestInnerClass t = new TestInnerClass();
TestInnerClass.T1 i = t.new IImpl();
i.Test();
TestInnerClass.T2 i2 = t.new IImpl2();
i2.Test2();
}
};





引用一下, 一个哥们解决了我的困惑
-droidcoffee- 2010-07-20
  • 打赏
  • 举报
回复
哈哈 我前几天也问过这个问题

http://topic.csdn.net/u/20100719/13/2ba02bae-a29b-421a-8884-91ad88fd6a03.html?1234508618

lz 是不是 把“内部类可以作为一个接口,由另一个内部类实现” 这句话中的 内部类

想象成 “匿名内部类”了? 嘿嘿 俺当初就是这么想的
ZangXT 2010-07-20
  • 打赏
  • 举报
回复
背吧,这种题目本身就是扯淡。
dr_lou 2010-07-20
  • 打赏
  • 举报
回复
写错了,不能加start;
zhrml 2010-07-20
  • 打赏
  • 举报
回复
期待高人解答。面试这个的时候,只会背。。。。。
dr_lou 2010-07-20
  • 打赏
  • 举报
回复
Thread th = new Thread(){
public void run(){

}
}.start();

是否算继承了Thread呢?
Jclick 2010-07-20
  • 打赏
  • 举报
回复
首先,可以实现接口这个有疑问么?事件监听器不就是实现的接口么?可以用匿名内部类来搞吧。
coooliang 2010-07-20
  • 打赏
  • 举报
回复
mark
huyong479072052 2010-07-20
  • 打赏
  • 举报
回复
帮顶。。。。。。

62,614

社区成员

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

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