• java内部类


    内部类

      指的是在Java中可以将一个类定义在另一个类的内部;

      内部类可以定义在 类的内部(与类成员层次一致)

      内部类可以定义在 方法/块内部(与类成员相差一个层次 方法的局部变量一个层次)

    *1.成员内部类

      将一个直接定义在类的里面,作为成员,与属性或方法层次一致;

      成员内部类可以与正常类一样 使用不同的修饰符来修饰;

      好处1.省略了一个.java文件;2.成员内部类中可以访问外部类的所有成员 包括私有的;

      若想要在内部类中通过对象.调用外部类成员  外部类.this.外部类成员(属性/方法);

      创建内部类对象;通过外部类对象创建;

      内部类存在后 源代码进行编译 产生一个字节码 Demo$Include.class 外部类$内部类.class

    2.局部内部类

      将一个定义在方法/块里面,作为成员的内部结构,与临时的局部变量一个层次

      局部内部类像是一个局部的变量一样,不能用public protected private 及static

      只能用abstract或final

      含局部内部类的字节码文件,如, Demo$1InnerTestMethod.class 外部类$1内部类.class(因为局部内部类可以重名,所以加数字)

      局部内部类 使用的变量只能是final修饰;编译 字节码定义好啦 由于变量的内容是可以改变

    *3.匿名内部类

      成员匿名内部类

      局部匿名内部类

       通常是接口或抽象类的具体子类这样写;

      开发中为了省略一个类文件 上述写法比较常见;

      匿名内部类很特殊 只有类体 没有类的所有结构 (修饰符 名字 继承 实现)

      不能用任何修饰符来修饰 匿名内部类也没有构造方法;

      如,做一个按钮 绑定一个时间监听器;

    4.静态内部类

      成员静态内部类

      不需要外部对象,通过正常的方式直接创建内部类;

      静态元素不能方法非静态成员(自己类和外部类都不可以)

    package innerclass;
    public class Demo{
    	private String name="Demo类属性";
    	{
    	}
    	public void testDemo(){
    		System.out.println("testDemo类");
    	}
    	public void testDemoOne(){
    		String s="abc";
    		class InnerTestMethod{
    			String xx=s;
    			
    		}//局部内部类;该方法完,则回收
    		System.out.println("testDemo类");
    	}
    	/*
    	public void testDemoTwo(){
    		class InnerTestMethod{
    			
    		}//局部内部类;该方法完,则回收
    		System.out.println("testDemo类");
    	}
    	*/
    	
    	public class Include{
    		private String name="内部类属性";
    		public void testInner(){
    			System.out.println("testInner中=;;"+Demo.this.name);
    			System.out.println("testInner中-;;"+this.name);
    			Demo.this.testDemo();
    			testDemo();
    	}
    	}//成员内部类;
    	
    	public static class InnerDemo{
    	}//静态成员内部类
    }
    

      

    package innerclass;
    import innerclass.Demo.Include;
    import innerclass.Demo.InnerDemo;
    public class Test{
    	public static void main(String[] args){
    		Demo a=new Demo();
    		//Demo.Include b=a.new Include();
    		//Include b=a.new Include();
    		Include b=new Demo().new Include();
    		b.testInner();
    		
    		InnerDemo c=new InnerDemo();
    	}
    }
    

     

     

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    memcached stats 命令
    sql server 游标语法
    iis 备份
    在Win7下使用超级任务栏时,将文件夹锁定在超级任务栏打开的默认都是计算机
    微点破解90天
    win7 设置 开始菜单 程序 为经典模式
    设置 ASP.NET 存储当前应用程序的临时文件(生成的源、编译了的程序集等)的目录的物理路径。
    Java六大必须理解的问题
    Windows不能在本地计算机启动OracleDBConsoleorcl
    更改phpMyAdmin的密码
  • 原文地址:https://www.cnblogs.com/canglongdao/p/12885673.html
Copyright © 2020-2023  润新知