黑马程序员技术交流社区

标题: 内部类问题! [打印本页]

作者: 余琪琪    时间: 2013-10-14 12:41
标题: 内部类问题!
本帖最后由 余琪琪 于 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>
复制代码

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

希望对你有所帮助

作者: 阿里策    时间: 2013-10-14 18:55
    这应该是属于静态static的用法。
    任何类中的静态方法都是可以由类直接调用的,并不需要非得生成一个该类的对象才能调用。因为static修饰的方法在类加载时就已经生成,也就是对象生成前就已经存在了。
    这里就是这样,Inner类直接调用其内部静态方法,没有生成对象,也不需要生成对象。任何一个类都有这项功能,这里你可以把Inner类当做Outer外的其他类来理解可能会好理解一些。
    静态方法特殊,可以由类直接调用的,不需要生成对象。
作者: To    时间: 2013-10-14 19:26
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
作者: 影响力147753321    时间: 2013-10-14 19:28
不是的,要看内部类中的变量或方法是类级别的还是对象级别的,类级别不用建对象,否则要建
作者: 余琪琪    时间: 2013-10-15 11:11
毕老师说“外部类要访问内部类,必须建立内部类对象”,但是不是:外部类中的静态方法调用静态内部类时,就不需要建立内部类?
作者: 余琪琪    时间: 2013-10-15 11:13
阿里策 发表于 2013-10-14 18:55
这应该是属于静态static的用法。
    任何类中的静态方法都是可以由类直接调用的,并不需要非得生成一 ...

欧了,很感谢,疑问已解决!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2