java基础之内部类

内部类的主要分类有:1.成员内部类,2.局部内部类,3.静态内部类,4.匿名内部类。下面一一进行说明:
1.成员内部类。
作为外部类的一个成员存在,可以访问外部类的所有属性和方法(privated),实例化过程:作为外部类的一个成员存在,你想一般访问一个类的成员变量,必须先实例化该类,然后再进行访问。所以访问内部类是必须先实例化外部类。
举例:

package day03; 
/** 
 * @author wangpei 
 * @version 
 *创建时间:2017年3月2日 上午9:16:38 
 * 类说明 
 */
public class Outer {
    private int a;
    public void printOuter(){
        System.out.println("这是Outer");
    }
    class Inner{
        public void printInner(){
            System.out.println("这是Inner");
        }
        public int getA(){
            return Outer.this.a;//return a;
        }


    }
    public static void main(String[] args) {
        Outer ot=new Outer();
        Outer.Inner a=ot.new Inner();
        System.out.println(a.getA());

    }

}

注意:当外部类与内部类中的变量重名时,外部内中的变量会被隐藏,在内部类里边调用时,肯定调用的是内部类里边的变量需要通过Outer.this.变量名来访问外部类中的变量
举例:

package day03; 
/** 
 * @author wangpei 
 * @version 
 *创建时间:2017年3月2日 上午9:16:38 
 * 类说明 
 */
public class Outer {
    private int a=1;
    public void printOuter(){
        System.out.println("这是Outer");
    }
    class Inner{
        int a=5;
        public void printInner(){
            System.out.println("这是Inner");
        }
        public int getA(){
            return a;//Outer.this.a;
        }


    }
    public static void main(String[] args) {
        Outer ot=new Outer();
        Outer.Inner a=ot.new Inner();
        System.out.println(a.getA());

    }

}

2.局部内部类
局部内部类是在方法内部定义的类,相当于方法的局部变量。
注意:局部内部类是在方法内部进行实例化,然后通过实例化外部类来调用该方法达到调用内部类的目地。

package day03; 
/** 
 * @author wangpei 
 * @version 
 *创建时间:2017年3月2日 上午9:16:38 
 * 局部内部类
 */
public class Outer {
    //private int a=1;
    public void printOuter(){
        int a=5;
        class Inner{
            public void getA(){
                System.out.println(a+1);
            }
        }
        Inner In = new Inner();
        In.getA();
    }

    public static void main(String[] args) {
        Outer ot=new Outer();
        ot.printOuter();


    }

}

3.静态内部类
使用static修饰的内部类。
<1>静态内部类可以直接被外部类调用,而不用实例化外部类。
<2>静态内部类不能访问外部类中非静态的成员和方法。

package day03; 
/** 
 * @author wangpei 
 * @version 
 *创建时间:2017年3月2日 上午9:16:38 
 * 类说明 
 */
public class Outer {
    private static int a=0;
    public void printOuter(){
        System.out.println("这是Outer");
    }
     static class Inner{
        public void printInner(){
            System.out.println("这是Inner");
        }
        public int getA(){
            //return a;//此处这样访问会报错,必须将设置为static
            return a;

        }


    }
    public static void main(String[] args) {
        //Outer ot=new Outer();
        Outer.Inner a=new Outer.Inner();//直接实例化,不用通过实例化Outer再实例化
        System.out.println(a.getA());

    }

}

4.匿名内部类
主要是在定义监听器时使用,因为java类实现的是单继承,定义匿名类,可以对多继承做补充。
注意:匿名内部类不可以被static,访问修饰符修饰。匿名内部类没有构造方法。

原文地址:https://www.cnblogs.com/wangxiaopei/p/8551244.html