黑马程序员技术交流社区
标题:
17题B选项,不理解,新人求助!
[打印本页]
作者:
忘壳
时间:
2014-8-22 17:30
标题:
17题B选项,不理解,新人求助!
如附近图片:17题B选项,毕老师说因为主函数是静态的,如果访问inner需要被static修饰。我不太理解此处,请大家帮我解答疑惑,最好写出正确的代码,先在此谢谢了
QQ截图20140822172400.png
(165.62 KB, 下载次数: 37)
下载附件
2014-8-22 17:24 上传
作者:
依然超级赛亚人
时间:
2014-8-22 17:49
本帖最后由 依然超级赛亚人 于 2014-8-22 17:57 编辑
class InnerDemo
{
public void func(){
//位置1
new Inner();
}
static class Inner{}//加static修饰。
public static void main(String[] args) {
//位置2
new Inner();
}
}
内部类成员位置,就可以被成员修饰符所修饰。比如static修饰的话内部类就有了static的特性(和它修饰成员时一样)。换句话说,内部类在成员位置上就相当于成员方法一样,平时我们访问该类下的成员方法时这个方法得是静态的(非静态时可以通过创建对象调用也行,和这道题关系不大),现在访问和它类似的内部类就有相同的规矩。
复制代码
作者:
c19t043
时间:
2014-8-22 19:21
先抱怨下,附图片的时候,最好把多余的代码剔除,留下纯净的图片
A在位置1 写 new Inner(),
B在位置2写,new Inner(),
C在位置2写 new d.Inner().
D在位置2写,new Demo.Inner();
首先,看位置2,首先我分析C.,D错在那
创建对象是,new +类名();
class Inner是内部类,要创建Inner,首先的创建外部类对象,即new Demo()
在有外部类对象的基础上,创建内部类,即 new Demo().new Inner()
但是,我们是在外部类里面,创建内部类,
内部类可以当做字段来处理,即代码,可以写成 this.new Inner();
在类中,我们一般都是省略了this关键字,
所以才有AB答案
作者:
0小菜鸟0
时间:
2014-8-22 21:23
首先你这个内部类是在成员位置,你可以把他看成一个成员变量,当静态方法访问成员变量时,需要加静态,
静态是优先于对象存在的,静态是属于类,不属于对象。所以内部类要加静态
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2