Java内部类的用法


在Java中允许在一个类的内部类定义类,这样的类称为内部类,内部类所在的类称为外部类。根据内部类的位置,修饰符和定义的方式可以分为成员内部类,静态内部类和方法内部类

成员内部类

在一个类中可以定义构造方法,成员方法,成员变量,还可以定义类,这个类被称为内部类,内部类可以访问外部类的所有成员
实例:

public class OuterClass {
    int num = 10;
    //测试方法
    public void outerTest() {
        System.out.println("外部类方法");
        //创建内部类对象,访问内部类方法
        InnerClass innerClass = new InnerClass();
        innerClass.innerTest();
    }

    //成员内部类
    class InnerClass {
        public void innerTest() {
            System.out.println("内部类方法");
        }
    }
}
public class Example01 {
    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
        outerClass.outerTest();
    }
}

如果我们想同过外部类去访问内部类的话,需要通过外部类对象去创建内部类对象

语法格式:外部类名.内部类名 变量名 = new 外部类().new 内部类();

我们将上面实例修改为如下代码:

public class Example01 {
    public static void main(String[] args) {
        //OuterClass outerClass = new OuterClass();
        //outerClass.outerTest();

        OuterClass.InnerClass innerClass = new OuterClass().new InnerClass();
        innerClass.innerTest();
    }
}

静态内部类

使用static关键字修饰一个成员内部类,该类被称为静态内部类。静态内部类可以不创建外部类而被实例化,语法格式如下:

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

实例:

public class OuterClass {
    //定义一个静态内部类
    static class innerClass{
        //定义一个成员变量
        private static int num = 10;
        //内部类测试方法
        public void innerTest(){
            System.out.println("num = " + num);
        }
    }
}
public class Example01 {
    public static void main(String[] args) {
        OuterClass.innerClass innerClass = new OuterClass.innerClass();
        innerClass.innerTest();
    }
}

使用静态内部类有以下两点需要注意:

  • 静态内部类只能访问外部类的静态成员
  • 在静态内部类只能定义静态成员,而非静态内部类不可以定义静态成员

方法内部类

在方法中定义的类称为方法内部类,该类只能在该方法中使用
实例:

public class OuterClass {
    //类的成员变量
    String name = "小明";
    int age = 25;
    static String hobby = "打篮球";

    //类的成员方法
    public void innerTest() {
        //方法内部类
        class methodInnerTest {
            public void A1() {
                System.out.println("name = " + name);
                System.out.println("age = " + age);
                System.out.println("hobby = " + hobby);
            }
        }
        //创建方法内部类
        methodInnerTest methodInnerTest = new methodInnerTest();
        methodInnerTest.A1();
    }
}
public class Example01 {
    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
        outerClass.innerTest();
    }
}

控制台输出:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值