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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 段光宇 中级黑马   /  2013-11-15 16:57  /  1432 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

打印语句中如何打印这3个x变量?
  1. public class Test{

  2.         public static void main(String[] args){
  3.                
  4.         }
  5.         class A {
  6.             int x = 1;         
  7.             class B {
  8.                 int x = 2;         
  9.                 void func() {
  10.                     int x = 3;
  11.                     System.out.println(new A().x + "," + new B().x + "," + x);
  12.                 }
  13.             }
  14.         }
  15.        
  16. }
复制代码
我想在控制台里输出来,但是不知道怎么在main函数里调用这个func函数。求解答

评分

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

查看全部评分

8 个回复

倒序浏览
本帖最后由 qw无语 于 2013-11-15 18:11 编辑

外部类名.内部类名 变量名=new 外部类名().new 内部类名();
访问静态内部类非静态成员 new 外部类名.内部类名().方法名();
访问静态内部类静态成员  外部类名.内部类名.方法名();
刚没考虑到A被你写成了主类的内部类,现在改了,这个可以这样写:也可以和楼下一样
A.B ab = new Test().new A().new B();
ab.func();
写在main方法里面就可以了

回复 使用道具 举报
qw无语 发表于 2013-11-15 17:01
访问静态内部类非静态成员 new 外部类名.内部类名().方法名();
访问静态内部类静态成员  外部类名.内部类名 ...

我试一下啊
回复 使用道具 举报
本帖最后由 wjj410830911 于 2013-11-15 17:38 编辑
  1. <p><p>public class Test{

  2.         public static void main(String[] args){
  3.                A.B ab =new A().new B();//按理来说应该是这样的 但不知道为什么报错了
  4.           ab.func();//我看了楼上的回答  不能用静态内部内  因为要用静态内部内的话下面的内 应该加static
  5.            //如果加了  就可以  
  6.            //A.B  ab = new A.B();
  7.            //ab.func();
  8.         }
  9.         class A {  //如果加了static
  10.             int x = 1;         
  11.             class B {  //如果加了static
  12.                 int x = 2;         
  13.                 void func() {
  14.                     int x = 3;
  15.                     System.out.println(new A().x + "," + new B().x + "," + x);
  16.                 }
  17.             }
  18. }</p></p>        
复制代码
  1. public class Test{

  2.         public static void main(String[] args){
  3.                  //A.B ab = new A().new B();//按理来说应该是这样的 但不知道为什么报错了
  4.                  //ab.func();//我看了楼上的回答  不能用静态内部内  因为要用静态内部内的话下面的内 应该加static
  5.                   //如果加了  就可以  
  6.                   A.B  ab = new A.B();
  7.                   ab.func();
  8.         }
  9.         static class A {
  10.             int x = 1;         
  11.            static class B {
  12.                 int x = 2;         
  13.                 void func() {
  14.                     int x = 3;
  15.                     System.out.println(new A().x + "," + new B().x + "," + x);
  16.                 }
  17.             }
  18.         }
  19.         
  20. }//  正确的代码应该是这样的   可以输出 1,2,3
复制代码

评分

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

查看全部评分

回复 使用道具 举报

刚写错了,那个调用静态内部类。。。
回复 使用道具 举报

那到底该怎么调用呢
回复 使用道具 举报

为什么A类和B类不加static就不能调用呢
回复 使用道具 举报
qw无语 发表于 2013-11-15 17:01
外部类名.内部类名 变量名=new 外部类名().new 内部类名();
访问静态内部类非静态成员 new 外部类名.内部类 ...

照你说的解决了,谢谢啊
回复 使用道具 举报
我看了下笔记
内部类分别有:1,成员内部类2,静态内部类3,局部内部类4,匿名内部类
        (1)成员内部类
                A:定义,:在一个外部类中有成员变量和成员方法,那么成员内部类就是把整个一个类当成了外部类的成员对待了
                B: 访问方式:内部类访问外部类,内部类可以直接访问外部类,包括私有成员,因为内部类拥有外部类的引用是类名.this
                            外部类访问内部类,外部类访问外部类的成员,必须要建立内部类的对象
                            格式:外部类名.内部类名 标识符 = new 外部类对象().new 内部类对象();
                                 Outer.Inner oi = new Outer().new Inner();//outer代表外部类,Inner代表内部类
                C:存放位置:在外部类里,在外部类的成员方法外.
                D:修饰符:final、abstract、public、private、protected和static等,那么被static修饰的就是下面所说的
                静态内部类.
        (2)静态内部类
                A:定义,就是在成员内部类的基础上加上static
                B:格式:外部类名.内部类名 标识符 = new 外部类名.内部类对象();
并没有说什么情况下必须加static
所以我自己估计
你要调用3个同为X的变量并且都将他们输出出来 那么就必须将各个类都静态了  让其他X值不能覆盖
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马