成员内部类和局部内部类

内部类:把类定义在其他类的内部 ,我们称为内部类。

内部类的特点:内部类可以访问外部类的成员,包括私有

                        外部类想要访问内部类的成员,必须创建内部类的对象

按照内部类在类中定义的位置不同,可以分为两种格式:成员内部类和局部内部类

创建成员内部类对象的格式:

外部类名.成员内部类名 对象名 = new 外部类名().new 内部类名();

class Outer3{
    private int num=10;
    class Inner{
        public void show(){
            System.out.println(num);
        }
    }
}
public class InnerClassDemo3 {
    public static void main(String[] args) {
        //外部类名.成员内部类名 对象名 = new 外部类名().new 成员内部类名();
        Outer3.Inner inner=new Outer3().new Inner();
        inner.show();
    }
}

成员内部常见的修饰符:

private: 其他类不能直接创建内部类的对象,要想使用被private修饰内部类成员,必须在本类中间接的创建对象调用

static: 内部类如果是被satic修饰的时候,只能访问外部类中静态成员

//private: 其他类不能直接创建内部类的对象,要想使用被private修饰内部类成员,必须在本类中间接的创建对象调用
class Outer3{
    private int num=100;
    private class Inner{
        public void show(){
            System.out.println(num);
        }
    }
    public void fun(){
        //创建对象
        Inner inner = new Inner();
        inner.show();
    }
}
public class InnerClassDemo3 {
    public static void main(String[] args) {
        Outer3 outer = new Outer3();
        outer.fun();
    }
}

//static: 内部类如果是被satic修饰的时候,只能访问外部类中静态成员
class Outer3{
    private static int num=100;
    static class Inner{
        public void show(){
            System.out.println(num);
        }
    }
}
public class InnerClassDemo3 {
    public static void main(String[] args) {
        //当内部类是被静态所修饰的时候,出现了另外一种创建内部类的方式
        //格式如下:
        //外部类名.内部类名 对象名 = new 外部类名.内部类名();
        Outer3.Inner inner=new Outer3.Inner();
        inner.show();

    }
}



局部内部类:

1、定义在方法中的类

2、局部内部类可以直接方法外部类中所有成员

3、要想使用局部内部类中的方法,在定义局部内部类的成员方法中,创建局部内部类对象调用方法

class Outer4{
    private int num1=10;
    public void show(){
        //在局部内部类中引用的本地的变量必须是最终变量或者实际上的最终变量
        //局部内部类的方法中定义的局部变量自动加上了final关键字
        //在JDK1.8之后会自动加上final关键字
        // final int num2=20;
        int num2=20;
        class Inner{
            int num3=30;
            public void fun(){
                System.out.println(num1);
                System.out.println(num2);
                System.out.println(num3);
            }
        }
        Inner inner = new Inner();
        inner.fun();
    }
}
public class InnerClassDemo4 {
    public static void main(String[] args) {
        Outer4 outer4 = new Outer4();
        outer4.show();
    }
}
运行结果:

 


版权声明:本文为wjm12345m原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。