java外部类与内部类的关系

来源:互联网 发布:淘宝退货红包退吗 编辑:程序博客网 时间:2024/04/28 01:10
 


public class OutClassTest {
 
 private String o1="外部类的变量111";
 
 private static String o2="外部类的静态变量222";
 
 public void outMethod(){
  System.out.println("外部类的方法。");
 }
 
// public C c = new C();外部类根本不知道局部内部类的存在,所以访问不了
 
 class InClassTest{
  public String i1="222";
  A a=new A();
  InClassTest2 test2=new InClassTest2();
  /**
   * 非静态内部类可以直接访问所有的外部类的成员
   */
  public void inMethod(){
   System.out.println("非静态内部类的方法。");
   outMethod();
   System.out.println(o1);
   System.out.println(test2.i2);
   System.out.println(a.a);
  }
 }
 
 class InClassTest2{
  public String i2="333";
 }

 public static class A{
  public int a=10;
  public static int b =100;
  
//  InClassTest inClassTest=new InClassTest();
  public void aMethod(){
   System.out.println("静态内部类的方法。");
   B b=new B();
   /**
    * 静态内部类可直接访问外部类的静态成员,但不能直接访问外部类的非静态成员,需要实例化
    */
   System.out.println(o2);
   
   OutClassTest outClassTest=new OutClassTest();
   outClassTest.outMethod();
   System.out.println(outClassTest.o1);
   
  }
 }
 
 public static class B{
  public int a=20;
  public static int b =200;
 }
 
 public void cMethod(){
  /**
   * 局部内部类跟实例内部类一样能访问外部类的所有成员
   * @author Administrator
   *
   */
  class C{
   private int a=30;
   public int aa=300;
  }
 }
 
 public static void main(String[] args) {
  OutClassTest out=new OutClassTest();
  out.outMethod();
  
  /**
   * 在外部类中不能直接访问内部类的成员,必须通过内部类的实例才可访问
   */
  OutClassTest.InClassTest test=new OutClassTest().new InClassTest();
  
  /*
   * 外部类中可直接访问静态内部类中的静态变量,若要访问静态内部类中非静态变量则需要实例化才行
   */
  System.out.println(A.b);
  
  OutClassTest.A in = new OutClassTest.A();
  in.a=1000;
  System.out.println(""+in.a);
 }

}