• 【09-04】java内部类学习笔记


    java中的内部类

    1. 静态内部类
    2. 成员内部类
    3. 方法内部类
    4. 匿名内部类

    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;
        		}
        	}
        }
    

    参考资料

  • 相关阅读:
    2017《面向对象程序设计》课程作业八
    2017《面向对象程序设计》课程作业七
    第六次作业
    2017《面向对象程序设计》课程作业五
    课程作业四
    2017《面向对象程序设计》课程作业三
    2017《面向对象程序设计》课程作业二
    2017《面向对象程序设计》课程作业一
    20200924 次小生成树
    水文章_考拉
  • 原文地址:https://www.cnblogs.com/achievec/p/5840196.html
Copyright © 2020-2023  润新知