A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 忘壳 中级黑马   /  2014-8-22 17:30  /  1249 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如附近图片:17题B选项,毕老师说因为主函数是静态的,如果访问inner需要被static修饰。我不太理解此处,请大家帮我解答疑惑,最好写出正确的代码,先在此谢谢了


QQ截图20140822172400.png (165.62 KB, 下载次数: 5)

QQ截图20140822172400.png

3 个回复

倒序浏览
本帖最后由 依然超级赛亚人 于 2014-8-22 17:57 编辑
  1. class InnerDemo
  2. {
  3.         public void func(){
  4.                 //位置1
  5.                 new Inner();
  6.         }
  7.         
  8.         static class Inner{}//加static修饰。
  9.         
  10.                 public static void main(String[] args) {
  11.                         //位置2
  12.                         new Inner();
  13.                 }
  14.         
  15.         
  16. }
  17. 内部类成员位置,就可以被成员修饰符所修饰。比如static修饰的话内部类就有了static的特性(和它修饰成员时一样)。换句话说,内部类在成员位置上就相当于成员方法一样,平时我们访问该类下的成员方法时这个方法得是静态的(非静态时可以通过创建对象调用也行,和这道题关系不大),现在访问和它类似的内部类就有相同的规矩。
复制代码
回复 使用道具 举报
  • 先抱怨下,附图片的时候,最好把多余的代码剔除,留下纯净的图片

  • 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答案

回复 使用道具 举报
首先你这个内部类是在成员位置,你可以把他看成一个成员变量,当静态方法访问成员变量时,需要加静态,
静态是优先于对象存在的,静态是属于类,不属于对象。所以内部类要加静态
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马