Java内部类

Java内部类是指定义在类内部或者方法内部的类,主要可以分为四种, 

  • 成员内部类, 成员内部类是指作为类的成员出现的类;
  • 局部内部类, 局部内部类是指定义在方法中的类,只能在对应的方法内部使用
  • 静态内部类, 静态内部类是指static修饰的成员内部类
  • 匿名内部类, 匿名内部类是可以不进行声明的类
import java.util.concurrent.Executor;

public abstract class Outter {

    private int outterNo = -1;

    private final static String CLASS_NAME = "Outter";

    //成员内部类
    class Inner1{

        private int innerNo1;

        //成员内部类可以直接访问外部的方法
        public void print(){
            System.out.println(Outter.this.outterNo);
            System.out.println(innerNo1);
        }
    }


    private void print1(){

        //方位成员内部类需要通过内部类的实例进行访问
        Inner1 inner1 = new Inner1();
        inner1.print();
    }

    private void print2(){

        //局部内部类声明在方法内部,只能在方法内部使用,
        //局部内部类也可以访问外部类的成员
        class Inner2{
            public int innerNo2;

            public void print(){
                System.out.println(Outter.this.outterNo);
            }
        };

        Inner2 inner2 = new Inner2();
        inner2.print();
    }

    //静态内部类
    public static class Inner3{

        //静态内部类可以访问外部类的静态成员
        public void print(){
            System.out.println(CLASS_NAME);
        }
    }

    private void print3(){
        //静态内部类实例化时不需要通过外部类的实例来创建,
        //静态内部类不依赖于外部类
        Outter.Inner3 inner3 = new Outter.Inner3();
        inner3.print();
    }

    protected abstract void printAbstract();
    
    private void print4(){
        
        //匿名内部类是作为类的实现出现,可以对方法进行实现或重载
        new Outter(){
            
            @Override
            protected  void printAbstract(){

            }
        };
    }
    
}

1. 成员内部类

     成员内部类是作为类的成员出现,

    成员内部类可以访问外部类的成员和方法,若外部类成员与内部类成员的成员重名时, 会发生隐藏现象, 默认访问内部类的成员, 可以使用Outter.this.XXX访问外部类成员

   外部类不能直接访问内部类的方法, 需要创建一个内部类的实例, 通过实例进行访问。 

   成员内部类可以用private,protect, public和static关键词进行修饰。

  

2.局部变量类 

  局部内部类位于方法内部, 只能在方法内部使用, 调用内部类同样需要创建一个实例

3.静态内部类  

静态内部类是有static修饰的成员变量类, 静态变量类只能访问类的静态成员和静态方法, 静态内部类也是不需要依赖外部类的, 可以直接被外部调用。

4.匿名内部类

匿名内部类的使用非常广泛, 主要用于对方法的实现或重载。

你可能感兴趣的:(java)