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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邵新瑜 中级黑马   /  2012-12-12 18:35  /  1788 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

老毕说:当外部类的静态方法访问内部类时,内部类一定要是静态!但是我用一下方法调用,内部类可以不是静态!
class Outer
{
     class Inner1
{
  public void show()
  {
   System.out.println("Inner1");
  }
}
public  static void  function()
{
  new Outer().new Inner1().show();
}
}
class day01
{
public static void main(String[] args)
{
  Outer.function();
}
}

5 个回复

正序浏览
1楼正解{:soso_e130:}
回复 使用道具 举报
吹毛求疵的话就别说了·指出可见 把自己见解说出来。
回复 使用道具 举报
邵天强 发表于 2012-12-12 19:59
哥哥,那句话你理解的有误,对于静态方法只要类以加载,内存就会给它开辟一份空间
你想想此时有对象吗,你 ...

这个我知道哇,我的意思是老毕说的不清楚,他说内部类必须要静态,这是他的话不严谨嘛
回复 使用道具 举报
??
你不是没有调用内部类吗,调的不是外部类静态方法吗?
回复 使用道具 举报
哥哥,那句话你理解的有误,对于静态方法只要类以加载,内存就会给它开辟一份空间
你想想此时有对象吗,你题目中的内部类是成员内部类,他就相当于外部类的成员,你想想
外部类的静态方法能访问外部类的非静态成员吗,而你现在直接把它的对象创建出来了,
那当然能够访问了,例如:如果你定义一个Person类,在测试类的静态方法中你创建了
Person类的对象,你想想能不能访问。毕老师的那句话是说:外部类的静态方法要想访问其他成员
,其他成员必须是静态的。
打个比喻:
public class Outer{
   private String name;
   public void test2(){
   }
   public static void test1(){
     //此时能访问name和test2()吗?要想访问必须是静态的
     //而你上面你直接创建了对象,那就不说了
     new Outer().test2();
  }
}
你上面定义的内部类就相当于外部类的成员,与上面的类似
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马