zoukankan      html  css  js  c++  java
  • 【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;
        		}
        	}
        }
    

    参考资料

  • 相关阅读:
    推荐.Net、C# 逆向反编译四大工具利器
    逆向工具/反编译工具 集合
    秒杀系统-并发处理
    react动态渲染组件
    通过dom获取react节点
    mac上安装windows触摸板不能右键
    STM32F103智能配网mqtt协议EMQ安卓App远程控制LED采集温湿度ESP8266
    itop4412 基于物联网技术的商品支付系统 毕业设计
    STM32F103 单片机最小系统 核心板 C8T6 MINI 飞控 小车 主控制板
    31865 MAX31865 RTD铂电阻温度检测器 PT100至PT1000传感器模块
  • 原文地址:https://www.cnblogs.com/achievec/p/5840196.html
Copyright © 2011-2022 走看看