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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张雪萍 中级黑马   /  2013-3-27 10:07  /  1663 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张雪萍 于 2013-3-27 19:56 编辑
  1. class Outer
  2. {
  3.         private static int x=3;
  4.         static class Inner
  5.         {
  6.                 static void function1()
  7.                 { int y=6;
  8.                         System.out.println(y);//打印结果为6
  9.                 }
  10.                 void function2()
  11.                 { int x=6;
  12.                         System.out.println(x);//打印结果为6
  13.                 }
  14.         }
  15. }
  16. class  InnerClassDemo1
  17. {
  18.         public static void main(String[] args)
  19.         {
  20.                 new Outer.Inner().function2();
  21.                
  22.                 Outer.Inner.function1();
  23.         }
  24. }
复制代码
调用内部类的两个方法具体是怎么分析,

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-27 19:51

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

4 个回复

倒序浏览
new Outer.Inner().function2();
这个方式是你先new内部类对象然后调用,内部类的方法,这个方法是非静态的
Outer.Inner.function1();
这个方式是,内部类是静态的,方法也是静态的
所以可以直接通过外部类名.内部类名.方法

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
因为function方法是静态方法所以直接用类名访问 因为Inner类是静态类也直接用类名访问
new Outer.Inner().function2()
等于
Outer.Inner oti=new Outer.Inner();
oti.function2()  ;                          
Outer.Inner.function1();


我测试了下 你在eclipse中直接用new Outer.Inner().function1()也是会出运行结果的 但是这句话下面会有个黄线 表示是警告 可以编译和运行 不知道这是怎么回事

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
内部类 和外部类的知识点:
内部类想要访问外部类的成员变量 :在内部类中想要访问外部类的成员时,要使用 外部类名.this.成员名
外部类不能调用内部类的成员:
                    因为外部类生成的时候,内部类有可能还没有创建.
如果在外部类中一定要调用内部类的成员:
                    那么必须先创建一个内部类对象,通过内部类对象调用内部类的成员

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
简单点说,静态属性,静态方法可以用类名直接引用.  非静态方法属性,需要有实例对象去调用.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马