java中内部类创建:成员内部类、局部内部类、静态内部类和匿名内部类

public修饰的成员内部类

/**
 * 成员内部类访问外部类成员变量:直接访问
 * 
 * 
 * @author Administrator
 *
 */
class Outer{
    private int num=3;
    public void method() {
        System.out.println("method()");
    }
    public void show1() {
        Inner in = new Inner();
        in.show();
    }
    class Inner{
        int num = 40;
        public void show() {
            int num = 20;
            method();
            System.out.println(num);//局部变量
            System.out.println(this.num);//内部成员变量
            System.out.println(Outer.this.num);//内部类访问外部类私有成员
        }
    }
}
public class Demo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //创建内部类格式
        Outer out = new Outer();
        Outer.Inner in=out.new Inner();//用外部类创建的对象创建内部类对象
        in.show();
    }

}

运行结果
这里写图片描述

private修饰的成员内部类

/**
 * 成员内部类可以用private修饰:此类只能在外部类使用
 * 
 * 
 * @author Administrator
 *
 */
class Outer1{
    private class Inner1{
        public void show() {
            System.out.println("show()");
        }
    }
    //外部类访问private修饰的内部类show方法
    public void method() {
        Inner1 in = new Inner1();
        in.show();
    }
}
public class Demo2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        new Outer1().method();
    }

}

运行结果
这里写图片描述

局部内部类

/**
 * 局部内部类:
 * 
 * 
 * @author Administrator
 *
 */
class Outter3 {

    private int age = 12;

    public void Print(final int x) { //这里局部变量传参x必须设置为final类型!如果不设置自动为final
        class Inner {
            public void inPrint() {
                System.out.println(x);//输出传的参数x的值
                System.out.println(age);//输出外部类私有变量age
            }
        }

        new Inner().inPrint();//局部内部类只能在当前局部创建对象

    }
}

public class Demo3 {
    public static void main(String[] args) {
        Outter3 out = new Outter3();
        out.Print(10);
    }
}

运行结果
这里写图片描述

静态内部类

/**
 * 静态内部类:
 * 
 * 
 * @author Administrator
 *
 */

class Outter4 {
    private static int age = 12;

    static class Inner {//静态内部类
        public void print() {
            System.out.println(age);//静态内部类访问外部静态成员变量
        }
    }
}

public class Demo4 {
//Outter4.Inner  当做一个整体来使用的
    public static void main(String[] args) {
        Outter4.Inner in = new Outter4.Inner();//可直接用外部类创建静态内部类对象
        in.print();

        //比较之前创建成员内部类对象如下所示
       // Outter out =new Outter();
        //Outter.Inner in=out.new Inner();
        //in.show();
    }

}

运行结果
这里写图片描述

匿名内部类

/**
 * 匿名内部类:
 *    格式:
 *      new 接口名或抽象类名(){
 *      重写或实现方法
 *      }
 * @author Administrator
 *
 *
 */
interface Fu{//定义接口
    public void method();//抽象方法
}
class Zi{//定义外部类
    public void show() {
        //匿名内部类
        //new 接口名 其实new的是实现类对象或子类对象
        new Fu() {//匿名内部类

            @Override
            public void method() {
                // TODO Auto-generated method stub
                System.out.println("method()");
            }

        }.method();//实现类调用method()方法
    }
}
public class Demo5 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Zi z=new Zi();//创建外部类对象
        z.show();//z对象调用show()方法
    }

}

运行结果
这里写图片描述

猜你喜欢

转载自blog.csdn.net/L_Mcode/article/details/81941848