网上看到的一道Java面试题,关于内部类的,大家帮忙看看。

nirvana_li 2006-05-19 11:27:30
QUESTION NO: 4
1. public class Outer{
2. public void someOuterMethod() {
3. // Line 3
4. }
5. public class Inner{}
6. public static void main( String[]argv ) {
7. Outer o = new Outer();
8. // Line 8
9. }
10. }
Which instantiates an instance of Inner?
A. new Inner(); // At line 3
B. new Inner(); // At line 8
C. new o.Inner(); // At line 8
D. new Outer.Inner(); // At line 8//new Outer().new Inner()


我觉得第8行应该是Outer.Inner i = o.new Inner();
选项是不是有问题,请教大家了。谢谢……(B.T.W:好久没散分了,顶者有分,今天晚上结贴:)~)
...全文
2127 63 打赏 收藏 转发到动态 举报
写回复
用AI写文章
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
asdfasdf123 2007-03-09
  • 打赏
  • 举报
回复
路过,学习~
CodeVitamin 2006-05-23
  • 打赏
  • 举报
回复
外部类使用内部类必须实例化对象。
aimy20023 2006-05-23
  • 打赏
  • 举报
回复
我在编译器上调试过。
题目给出的答案都是错误的。
正确答案应该是:
o.new Inner(); //line 8

大家不要争了
nirvana_li 2006-05-22
  • 打赏
  • 举报
回复
摘了一段,作为内部类的总结:

Inner class有四类:Inner Classes、Method-local Inner Classes、Anonymous Inner Classes、Static Nested Classes。
◎ Inner Classes(第一种的inner class)的instantiation方式,若是在Outer class的话,直接使用一般的方式就可以了。若是在Outer class以外的class要instantiate该inner class,则一定要透过outer class的reference才行。例:

MyOuter mo = new MyOuter(); //creating outer class reference
MyOuter.MyInner mi = mo.new MyInner(); //creating inner class reference

要一行解决的话可以这样写:
MyOuter.MyInner mi = new MyOuter().new MyInner();
//同样是透过outer class reference

◎ 可以用在inner class的modifier:public, protected, private, final, strictfp, abstract, static(会变成static nested class)
◎ 除非enclosing method内的变量标为final,否则method-local inner class是无法看得到该变量的,可以自己写来试试。
◎ Anonymouse inner class的写法一定要会。
◎ Static nested class的instantiation方法(注意与一般inner class的不同):
MyOuter.Nested mn = new MyOuter.Nested(); //don’t need outer class reference

◎ 各种inner class的instantiation, usage等都要彻底弄懂。最好是多写几个class,自己模拟试试各种写法会发生什么事。

马上结贴了。上个星期五停电了。郁闷~
glok 2006-05-22
  • 打赏
  • 举报
回复
帮顶。
yjg_2008 2006-05-22
  • 打赏
  • 举报
回复
A、B这两项可以
kingofworl 2006-05-22
  • 打赏
  • 举报
回复
mark
healer_kx 2006-05-22
  • 打赏
  • 举报
回复
public class Test {

public Test() {

Inner i1 = new Inner();
Inner i2 = new Test.Inner();
Test.Inner i = new Test.Inner();
System.out.println(i.i);
}


class Inner {
public int i = 0;

}

public static void main(String[] args) {
Test t = new Test();

Inner r = t.new Inner();
System.out.println(r.i);
}

}
elfer 2006-05-21
  • 打赏
  • 举报
回复
楼主是对的,应该是 new Outer().new Inner();
其他的都是错的,A并没有创建对象实例

网上有篇 文章
http://www.frontfree.net/view/article_704.html
大家有兴趣可以 看一看
Arxi 2006-05-21
  • 打赏
  • 举报
回复
麻烦各位选答案时先测试一下能否编译通过好不好,很明显只有A能通过语法检测,但是A并没有产生实例,选A是错误的
UnAgain 2006-05-21
  • 打赏
  • 举报
回复
大家都看仔细了,C选项的语句是

new o.Inner(); // 错误

而不是

o.new Inner(); // 正确
tom_jie 2006-05-21
  • 打赏
  • 举报
回复
我完全同意楼主的说法,这个我讲过。内部类有3种实现方式:
1.直接new
2.使用匿名内部类,如:addWindowListener(new WindowAdapter())
3.使用包围类的对象进行实例化:outer ob = new outer();
outer.inner ob1 = ob.new inner();
qinqinxiatiao 2006-05-21
  • 打赏
  • 举报
回复
C

顶咯
caoi 2006-05-21
  • 打赏
  • 举报
回复
C
D

内部类都在外部类的对象之上建立,D是匿名的。
UnAgain 2006-05-21
  • 打赏
  • 举报
回复
To: ljh13835147360()
因为class J没有创建实例,方法声明为静态的,并不等于其所属的类也会被声明为静态。在方法中声明的内部类依附于方法所属的类,而不是依附于该方法。
UnAgain 2006-05-20
  • 打赏
  • 举报
回复
真倒霉,怎么跑那个位置上了
china2685920 2006-05-20
  • 打赏
  • 举报
回复
mark
  • 打赏
  • 举报
回复
哦,楼上的,我不太懂JAVA,我用的是ECLIPSE 3.1,J2SE1.5

不知道语法解释在不同编译器是否有不同。

不过我不喜欢你的态度,难怪你信誉值只有87。

也许你是CSDN的老鸟了?不过我看不像,还是多学学再出来吧!

你到告诉我内部类为什么不能跟MAIN放一起?MAIN不过是一个程序入口点。即使上面的代码出现错误,也会是一个运行时错误。
UnAgain 2006-05-20
  • 打赏
  • 举报
回复
改正错误,确实,不能选C。

看错了,应该是o.new Inner();
hanxinyu611_2000 2006-05-20
  • 打赏
  • 举报
回复
狗屁,狗屁,狗屁
妈的,我把程序输进去了,这段程序根本不能编译,
内部类和main函数可以放在一起么
加载更多回复(43)

62,615

社区成员

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

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