java内部类简单用法

Posted carrykai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java内部类简单用法相关的知识,希望对你有一定的参考价值。

package innerClass;
/**
 * 特点
 * 1:增强封装性,通过把内部类隐藏在外部类的里面,使得其他类不能访问外部类。
 * 2:增强可维护性。
 * 3:内部类可以访问外部的成员。
 * @author Administrator
 *
 */
class InnerClassDemo {
    String str="Out";
    static  String str1="static";
    public static void outstaticStr() {
        System.out.println();
    }
    public void outStr() {
        StaticInner staticInner=new StaticInner();
        staticInner.staticStr();
        String c= StaticInner.strInnerSt;
        String InnerC=Inner.InnerStaticelements;
        System.out.println(str);
        Inner inner =new Inner();
        System.out.println(inner.str);
        
        inner.innerStr();
    }
    /**
     * 实例内部类
     * @author Administrator
     *1:实例内部类是对象的内部类,把它当成对象看待。不能用static修饰
     *2:实例内部类存在一个外部类的引用
     *3: 实例内部类可以直接访问外部类的成员 用外部类.this的引用访问外部类 ,内部类静态成员直接用外部类.成员访问。
     *4;外部类要创建一个内部类的对象,然后再访问内部类的成员。静态成员直接用内部类.成员。
     *5:实例内部类的静态成员必须是fianl
     */
    public class Inner{
        String str="inner";
        static final String InnerStaticelements="staticInner";
        
        public  void innerStr()    {
            InnerClassDemo.outstaticStr();
            System.out.println(this.str);
            System.out.println(InnerClassDemo.this.str);
            
        }
    }
    /**
     * 
     * @author Administrator
     * 内部类加上static就是静态内部类
     * 静态内部类没有在堆开辟一个空间存放执行外部类的引用。
     * 静态内部类可以直接访问外部类的静态成员(不需要外部类.外部类成员),通过new 外部类访问外部类的非静态类成员。
     * 静态内部类可以创建非静态的成员。
     *外部类可以通过new 静态内部类的对象访问内部类的非静态成员,通过静态内部类.成员的方式访问内部类静态成员
     */
     static class StaticInner{
        static String strInnerSt="rewre";
        String srt="staticInner";
        public void staticStr() {
            System.out.println(new InnerClassDemo().str);
            System.out.println(str1);
        }
    }
     /**
      * 局部内部类不能设置访问权限private public 等等
      * 局部内部类定义在方法,使用也在方法中
      * 局部内部类不能包含静态变量
      * 通过访问外部的成员,静态的用外部.成员的方式,普通的就是用new 外部内的方式。
      * 外部类不能访问内部类成员
      */
     public  void showLocalInner() {
          class  LocalInner{
             String  local="localInner";
              public  void localMethods(){
                 System.out.println(str);
             }
              
         }
          System.out.println(new LocalInner().local);
          localMethods();
     }
     /**
      * 匿名类 一般使用在事件开发中,安卓,GUI开发中,只使用一次,。
      * 可以非静态成员通过new的外部类的方式访问外部类的成员,静态成员则通过外部类.的方式访问外部类静态成员
      *
      */
     Runnable run =new Runnable() {
        
        @Override
        public void run() {
            // TODO Auto-generated method stub
            System.out.println(str);
            
        }
    };
    
}
package innerClass;

import innerClass.InnerClassDemo.Inner;

public class TestInnerClass {
    public static void main(String[] args) {
         InnerClassDemo.Inner inner=new InnerClassDemo().new Inner();//其他类访问实例内部类的方式
         inner.innerStr();
    
         System.out.println(InnerClassDemo.StaticInner.strInnerSt);//在外部可以通过 外部类.内部类.内部类成员访问内部类的静态成员
         
    }
}

 

以上是关于java内部类简单用法的主要内容,如果未能解决你的问题,请参考以下文章

Java内部类用法[重复]

Java内部类用法总结

Java的Lambda表达式

简单谈一谈Java内部类的使用原因

Java内部类和匿名内部类的用法

片段内部静态类和gradle问题