【09-04】java内部类学习笔记
java中的内部类
- 静态内部类
- 成员内部类
- 方法内部类
- 匿名内部类
1.静态内部类
    class Outer {
    
    	private static String outer = "outer";
    
    	/**
    	 * 静态内部类只能访问外部类的静态成员
    	 */
    	public static class StaticInner {
    		public void show() {
    			System.out.println(outer);
    		}
    	}
    
    	public void test() {
    		StaticInner si = new StaticInner();
    		si.show();
    	}
    }
    
    class Other {
    
    	public static void main(String[] args) {
    		/**
    		 * 静态public内部类的创建对象的方式
    		 */
    		Outer.StaticInner si = new Outer.StaticInner();
    		si.show();
    	}
    }
jdk中LinkedList使用了Nodo内部类表示存储的节点信息。
2.成员内部类
    class Outer {
    	private static String outerStatic = "outer";
    	private int outerNum = 666;
    
    	/**
    	 * 成员内部类可以访问外部类的所有成员
    	 */
    	public class Inner {
    		/**
    		 * 成员内部类中不可以定义静态变量和方法,只能定义常量。这样的原因可能是直接在外部类中其实就可以定义这些静态属性
    		 */
    		private static final int innerNum = 233333;
    
    		public void show() {
    			System.out.println(outerStatic);
    			System.out.println(outerNum);
    			System.out.println(innerNum);
    			/**
    			 * 同名时调用的当前类的test方法
    			 */
    			test();
    			/**
    			 * 访问外部类的方法
    			 */
    			Outer.this.test();
    		}
    
    		public void test() {
    			System.out.println("inner test method");
    		}
    	}
    
    	public void test() {
    		// Inner inner = new Inner();
    		// inner.show();
    		System.out.println("outer test method");
    	}
    }
    
    class Other {
    
    	public static void main(String[] args) {
    		/**
    		 * 成员内部类的创建对象的方式
    		 */
    		Outer outer = new Outer();
    		Outer.Inner inner = outer.new Inner();
    		inner.show();
    	}
    }
jdk中LinkedList中的listIterator和descendingIterator接口通过成员内部类的方式进行了实现
3.方法内部类
    class Outer {
        private int a = 100;
        
        public void test(final int param){
        	/**
        	 * 访问方法局部成员,该成员需为final
        	 */
            final String str = "hello";
            class Inner {
                public void innerMethod(){
                    System.out.println("outer a " +a);
                    System.out.println("param " +param);
                    System.out.println("local var " +str);
                }
            }
            Inner inner = new Inner();
            inner.innerMethod();
        }
    }
4.匿名内部类
    class AnonymousClass {
    	public static void main(String[] args) {
    		List<Person> list = new ArrayList<Person>();
    		Collections.sort(list, new Comparator<Person>() {
    
    			@Override
    			public int compare(Person o1, Person o2) {
    				return o1.getName().compareTo(o2.getName());
    			}
    
    		});
    	}
    
    	class Person {
    
    		private String name;
    
    		public Person(String name) {
    			this.name = name;
    		}
    
    		public String getName() {
    			return this.name;
    		}
    	}
    }
 
                    
                     
                    
                 
                    
                 

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号