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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余琪琪 中级黑马   /  2013-10-14 12:41  /  1658 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 余琪琪 于 2013-10-15 11:13 编辑

毕向东老师的25天java视频里,第九天第一节说“外部类要访问内部类,必须建立内部类对象”,但是第二节
  1. <p>class Outer
  2. {
  3.         private static  int x = 3;

  4.         
  5.         static class Inner//静态内部类
  6.         {
  7.                 static void function()
  8.                 {
  9.                         System.out.println("innner :"+x);
  10.                 }
  11.         }

  12.         public static void method()
  13.         {
  14.                 Inner.function();
  15.         
  16.         }

  17. }</p><p>其中method中却没有创建内部类对象?我是否能理解为毕老师在第一节并没有说清楚条件,应该确切的说:外部类要访问内部类,必须建立内部类对象。(但当外部类和内部类都是静态时,则不需要创建内部类对象),对吗?</p>
复制代码

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

6 个回复

倒序浏览
纠正一个错误,你见过外部类有静态的吗??static能修饰内部类,但是好像不能修饰外部类吧,
那个inner是一个静态内部类:静态内部类定义在类中,任何方法外,用static定义。
静态内部类只能访问外部类的静态成员。生成(new)一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in=new Outer.Inner();
而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类。
静态内部类不可用private来进行定义。

希望对你有所帮助

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
    这应该是属于静态static的用法。
    任何类中的静态方法都是可以由类直接调用的,并不需要非得生成一个该类的对象才能调用。因为static修饰的方法在类加载时就已经生成,也就是对象生成前就已经存在了。
    这里就是这样,Inner类直接调用其内部静态方法,没有生成对象,也不需要生成对象。任何一个类都有这项功能,这里你可以把Inner类当做Outer外的其他类来理解可能会好理解一些。
    静态方法特殊,可以由类直接调用的,不需要生成对象。

评分

参与人数 1技术分 +1 收起 理由
To + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
To 金牌黑马 2013-10-14 19:26:06
板凳
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
不是的,要看内部类中的变量或方法是类级别的还是对象级别的,类级别不用建对象,否则要建
回复 使用道具 举报
毕老师说“外部类要访问内部类,必须建立内部类对象”,但是不是:外部类中的静态方法调用静态内部类时,就不需要建立内部类?
回复 使用道具 举报
阿里策 发表于 2013-10-14 18:55
这应该是属于静态static的用法。
    任何类中的静态方法都是可以由类直接调用的,并不需要非得生成一 ...

欧了,很感谢,疑问已解决!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马