黑马程序员技术交流社区

标题: 类的调用问题 [打印本页]

作者: 段光宇    时间: 2013-11-15 16:57
标题: 类的调用问题
打印语句中如何打印这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函数。求解答
作者: qw无语    时间: 2013-11-15 17:01
本帖最后由 qw无语 于 2013-11-15 18:11 编辑

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


作者: 段光宇    时间: 2013-11-15 17:02
qw无语 发表于 2013-11-15 17:01
访问静态内部类非静态成员 new 外部类名.内部类名().方法名();
访问静态内部类静态成员  外部类名.内部类名 ...

我试一下啊
作者: wjj410830911    时间: 2013-11-15 17:03
本帖最后由 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
复制代码

作者: qw无语    时间: 2013-11-15 17:04
段光宇 发表于 2013-11-15 17:02
我试一下啊

刚写错了,那个调用静态内部类。。。
作者: 段光宇    时间: 2013-11-15 17:25
wjj410830911 发表于 2013-11-15 17:03

那到底该怎么调用呢
作者: 段光宇    时间: 2013-11-15 17:36
wjj410830911 发表于 2013-11-15 17:03
}

为什么A类和B类不加static就不能调用呢
作者: 段光宇    时间: 2013-11-15 17:41
qw无语 发表于 2013-11-15 17:01
外部类名.内部类名 变量名=new 外部类名().new 内部类名();
访问静态内部类非静态成员 new 外部类名.内部类 ...

照你说的解决了,谢谢啊
作者: wjj410830911    时间: 2013-11-15 17:44
我看了下笔记
内部类分别有: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值不能覆盖




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