黑马程序员技术交流社区

标题: 内部类可以引用它的包含类的成员吗?有没有什么限制? [打印本页]

作者: 李珍    时间: 2012-7-21 21:26
标题: 内部类可以引用它的包含类的成员吗?有没有什么限制?
有谁可以解释一下呢
作者: 刘海源    时间: 2012-7-21 21:30
完全可以。如果不是静态内部类,那没有什么限制!

如果你把静态嵌套类当作内部类的一种特例,那在这种情况下不可以访问外部类的普通成员变量,而只能访问外部类中的静态成员,例如,下面的代码:

class Outer

{

   static int x;

   static class Inner

   {

         void test()

         {

               syso(x);

         }

   }

}


作者: 黎健东    时间: 2012-7-21 22:23
内部类可以任意调用其他包的类,方法如下
  1. package Heima001_DumpAndDown100;

  2. import Heima001_DumpAndDown200.Test2;


  3. public class Test {
  4.         public static void main(String[] args)  {
  5.                 System.out.println("*****************************");
  6.                 System.out.println("我只要调用Outer");
  7.                 new Outer();
  8.                 System.out.println("*****************************");
  9.                 System.out.println("我要使用内部类");
  10.                 new Outer("我要使用内部类");
  11.                 System.out.println("*****************************");
  12.                 System.out.println("我要使用内部类并调用其他包的类");
  13.                 new Outer("我要使用内部类","并调用其他包的类");
  14.                 System.out.println("*****************************");
  15.         }
  16. }

  17. class Outer{
  18.         private String s;
  19.         private String s2;
  20.        
  21.         public Outer(String s) {
  22.                 new Inner();
  23.         }
  24.        
  25.         public Outer(String s, String s2) {
  26.                 new Inner(s);
  27.         }


  28.         public String getS() {
  29.                 return s;
  30.         }

  31.         public void setS(String s) {
  32.                 this.s = s;
  33.         }

  34.         public Outer() {
  35.                 System.out.println("Outer被调用了");
  36.         }
  37.        
  38.         class Inner{
  39.                 private String s;
  40.                
  41.                
  42.                 public Inner(String s) {
  43.                         System.out.println("内部类被调用了");
  44.                         Test2 test2= new Test2();
  45.                 }

  46.                 public Inner() {
  47.                         System.out.println("内部类被调用了");                       
  48.                 }
  49.                
  50.         }
  51. }
复制代码
其他包的类:
  1. package Heima001_DumpAndDown200;


  2. public class Test2 {
  3.         int t2;
  4.         public Test2(int t2) {
  5.                 super();
  6.                 this.t2 = t2;
  7.         }
  8.         public int getT2() {
  9.                 return t2;
  10.         }
  11.         public void setT2(int t2) {
  12.                 this.t2 = t2;
  13.         }
  14.         public Test2() {
  15.                 System.out.println("另外包的Test2类被调用了");
  16.         }
  17. }

复制代码
输出结果:

*****************************
我只要调用Outer
Outer被调用了
*****************************
我要使用内部类
内部类被调用了
*****************************
我要使用内部类并调用其他包的类
内部类被调用了
另外包的Test2类被调用了
*****************************

作者: 刘笑    时间: 2012-7-21 22:28
知道为什么定义内部类么?就是为了方便引用外部类的成员呀




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