zoukankan      html  css  js  c++  java
  • java基础 内部类详解

    什么是内部类?

    1.内部类也是一个类;

    2.内部类位于其他类声明内部。

    内部类的常见类型

    1.成员内部类

    2.局部内部类

    3.匿名内部类

    4.静态内部类

    简单示例

    /**
     * 外部类
     * 
     */
    public class OuterClass {
    
    	private String s = "private String from OuterClass";
    	
    	private String fs = "final String from OuterClass";
    	
    	/**
    	 * 成员内部类,字面上理解就是外部类的一部分。类似外部类的属性或方法
    	 * 外部类的属性和方法对于内部类都是可以访问的,包括private属性方法
    	 * 调用方法 外部类名。this。属性或方法
    	 */
    	class PartnerClass
    	{
    		public void print()
    		{
    			System.out.println("this comes from PartnerClass and can get "+OuterClass.this.s);
    			OuterClass.this.print();
    		}
    	}
    	
    	private void print()
    	{
    		System.out.println("private method form OuterClass");
    		/**
    		 * 局部内部类只可以在一定范围内被访问
    		 */
    		class Part
    		{
    			void print()
    			{
    				System.out.println("this comes from part class and can get "+ OuterClass.this.s);
    			}
    		}
    		
    		new Part().print();
    	}
    	
    	interface Anonymous
    	{
    		void print();
    	}
    	
    	/**
    	 * 匿名内部类多为已经定义好的接口或抽象类,在需要使用的地方采取进行具体实现
    	 * 同成员内部类类似
    	 */
    	Anonymous anyms = new Anonymous() {
    		
    		@Override
    		public void print() {
    			System.out.println("this comes from a anonymous class and can get "+OuterClass.this.fs);
    			OuterClass.this.print();
    		}
    	};
    	
    	/**
    	 * 静态内部类只能访问外部类的静态属性和方法
    	 * 静态内部类可以通过new OuterClass。StaticClass()的方式创建静态内部类对象
    	 */
    	private static class StaticClass implements Anonymous
    	{
    
    		@Override
    		public void print() {
    			System.out.println("this comes from static inner class");
    		}
    		
    	}
    	
    	public static void main(String[] args) {
    		
    		OuterClass outer = new OuterClass();
    		/**
    		 * 外部类可以创建获取内部类对象
    		 * 创建方法为  new 外部类().new 内部类()
    		 */
    		outer.new PartnerClass().print();
    		
    		outer.anyms.print();
    		
    		StaticClass sc = new OuterClass.StaticClass();
    		sc.print();
    	}
    
    }

    内部类有什么用处?

    1.隐藏类名和具体实现细节

    2.内部类可以访问外部类的属性和方法

    3.内部类可以用来实现闭包和回调

    4.内部类可以用来实现多重继承

    5.封装数据进行传值

    个人内部类使用经验不多,以后有用到会补充进来

  • 相关阅读:
    堆中的路径
    二叉搜索树的操作集
    windows 利用凭据进行远程连接
    解决通过域名访问不了
    Linux 安装redis
    mybatis之resultType
    nuxt 引入swiper插件报错 Cannot resolve swiper/dist/css/swiper.css
    windows 设置连接linux redis
    linux 安装redis报gcc错误
    maven打包好的jar安装到本地库
  • 原文地址:https://www.cnblogs.com/ssp2110/p/3797681.html
Copyright © 2011-2022 走看看