举例[实例内部类, 静态内部类

来源:互联网 发布:淘宝网商银行是什么 编辑:程序博客网 时间:2024/06/06 11:09

举例[实例内部类, 静态内部类]:

public class OnlyForTest {   

  1.     public static String staticOutMember = "Static Out Member";   
  2.     private String userName;   
  3.     private int age;   
  4.     //省略Getter/Setter   
  5.        
  6.     public static void main(String[] args) {   
  7.         OnlyForTest oft = new OnlyForTest();   
  8.         //A1. 在创建实例内部类实例时, 外部类的实力必须已经存在.  
  9.         OnlyForTest.Inner inner = oft.new Inner();   
  10.            
  11.         //A3. 一个外部类可以有多个内部类  因此不允许外部类直接调用内部类方法或属性, 在需要时, 使用内部类实例访问内部类成员  
  12.         //而内部类进对应一个外部类, 因此可以直接使用外部类的引用.  
  13.         oft.age = oft.new Inner2().age;   
  14.            
  15.         inner.setOutInstanceNmae("tom");   
  16.            
  17.         oft.new Inner2().print();   
  18.            
  19.         //B1: 直接访问静态类静态成员, 不需创建实例.   
  20.         System.out.println(staticInnerClass.staticInnerMember);   
  21.            
  22.         new staticInnerClass().printNmae();   
  23.     }   
  24.        
  25.     class Inner {   
  26.         public void setOutInstanceNmae(String s){   
  27.             //A2. 实例内部类自动持有外部类实例的引用   
  28.             userName = s;   
  29.             System.out.println("内部类直接引用外部类实例 - 内部类赋值外部类成员 " + userName);   
  30.         }   
  31.     }//end of class Inner   
  32.        
  33.     class Inner2 {   
  34.         int age= 2;   
  35.         //A4. 在实例内部类中不能定义静态成员, 只能定义实例成员.   
  36.         //报错!static int staticInt = 4;  
  37.         public void print() {   
  38.             System.out.println(userName);   
  39.             //A5. 当内部类与外部类有同名的成员时,如age   
  40.             //直接使用age或shis.age表示inner2内age  
  41.             //OnlyForTest.this.age表示外部类中的age  
  42.             System.out.println(age);   
  43.             System.out.println(OnlyForTest.this.age);   
  44.             //B2. 直接访问外部类的静态成员  
  45.             System.out.println(staticOutMember);   
  46.         }   
  47.     }//end of class Inner2   
  48.        
  49.     static class staticInnerClass {   
  50.         public static String staticInnerMember = "Static Inner Member";   
  51.         public void printNmae() {   
  52.             //B3:静态内部类在访问外部类实例变量时, 必须通过外部实例  
  53.             OnlyForTest o = new OnlyForTest();   
  54.             o.userName = "set by Static Inner Class";   
  55.             System.out.println(o.userName);   
  56.         }   
  57.     }//end of staticInnerClass
0 0
原创粉丝点击