内部类

在 Java 中,允许在一个类的内部定义类,这样的类称作内部类,这个内部类所在的类称作外部类

根据内部类的位置、修饰符和定义的方式可分为成员内部类、静态内部类、方法内部类。

成员内部类

在一个类中,除了可以定义成员变量、成员方法,还可以定义类,这样的类被称作成员内部类。在成员内部类中可以访问外部类的所有成员。

Example.java 示例代码:

class Outer{
    private int num = 4;  //定义类的成员变量

    //成员内部类
    class Inner{
        void show(){
            //在成员内部类的方法中访问外部类的成员变量
            System.out.println("num=" + num);
        }
    }

    //成员方法,该方法中访问内部类
    public void test(){
        Inner inner = new Inner();
        inner.show();
    }
}

public class Example{
    public static void main(String[] args){
        Outer outer = new Outer();   //创建外部类对象
        outer.test();     //调用 test() 方法
    }
}

此代码,说明内部类可以在外部类中被使用,并能访问外部类的成员。

如果想通过外部类去访问内部类,则需要通过外部类对象去创建内部类对象,创建内部类对象的具体语法格式如下:

外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

Example.java 示例代码:

public class Example{
    public static void main(String[] args){
        Outer.Inner inner = new Outer().new Inner();  //创建内部类对象
        inner.show();   //调用 test() 方法
    }
}

注意: 如果内部类被声明为私有,外界将无法访问。


静态内部类

使用 static 关键字修饰一个成员内部类,该内部类被称作静态内部类,它可以在不创建外部类对象的情况下被实例化。

创建静态内部类对象的具体语法格式如下:

外部类名.内部类名 变量名 = new 外部类名.内部类名();

Example.java 示例代码:

class Outer{
    private static int num = 6;

    //静态内部类
    static class Inner{
        void show(){
            System.out.println("num=" + num);
        }
    }
}

class Example{
    public static void main(String[] args){
        Outer.Inner inner = new Outer.Inner();  //创建内部类对象
        inner.show();   //调用内部类的方法
    }
}

注意:
1、在静态内部类中,只能访问外部类的静态成员。
2、在静态内部类中可以定义静态的成员,而在非静态的内部类中不允许定义静态的成员。例如下面的代码,编译会报错

class Outer{
    class Inner{
        static int num = 10;   //不能定义静态成员,编译报错
        void show(){
            System.out.println("num=" + num);
        }
    }
}

方法内部类

方法内部类是指在成员方法中定义的类,它只能在当前方法中被使用。

Example.java 示例代码:

class Outer{
    private int num = 4;   //定义成员变量
    public void test(){

        //内部类
        class Inner{
            void show(){
                System.out.println("num=" + num);  //访问外部类的成员变量
            }
        }
        Inner in = new Inner();   //创建内部类对象
        in.show();    //调用内部类的方法
    }
}
public class Example{
    public static void main(String[] args){
        Ourter outer = new Outer();  //创建外部类对象
        outer.test();   //调用 test() 方法
    }
}

在此代码中,由于 Inner 是方法内部类,因此程序只能在方法中创建该类的实例对象并调用 show() 方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值