zoukankan      html  css  js  c++  java
  • 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!!!
  • 相关阅读:
    那些离不开的 Chrome 扩展插件
    Spring Boot 实战 —— 入门
    Maven 学习笔记
    Linux lvm 分区知识笔记
    Linux 双向 SSH 免密登录
    CentOS Yum 源搭建
    Ubuntu 系统学习
    iOS 测试三方 KIF 的那些事
    Swift 网络请求数据与解析
    iOS Plist 文件的 增 删 改
  • 原文地址:https://www.cnblogs.com/canglongdao/p/12885673.html
Copyright © 2011-2022 走看看