Java内部类的用法学习笔记

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

  • 成员内部类
       我们知道在一个类中可以定义构造方法,成员方法,成员变量,还可以定义类,这个类被称为内部类,内部类可以访问外部类的所有成员。
    实例:
public class Example08 {
    
    
    public static void main(String[] args) {
    
    
        //创建外部类对象
        OuterClass outerClass = new OuterClass();
        //调用外部类方法
        outerClass.outerTest();
    }
}
class OuterClass{
    
    
    //定义一个成员变量
    int num = 10;
    //定义一个方法,方法中访问内部类
    public void outerTest(){
    
    
        InnerClass innerClass = new InnerClass();
        innerClass.innerTest();
    }
    //定义一个内部类
    class InnerClass{
    
    
        public void innerTest(){
    
    
            System.out.println("我是成员内部类我可以访问外部类成员--" + num);
        }
    }
}

运行结果:
在这里插入图片描述
如果我们想同过外部类去访问内部类的话,需要通过外部类对象去创建内部类对象,语法格式:

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

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

public class Example08 {
    
    
    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 Example08 {
    
    
    public static void main(String[] args) {
    
    
        //创建内部类对象
        OuterClass.innerClass innerClass = new OuterClass.innerClass();
        //调用内部类对象
        innerClass.print();
    }
}
class OuterClass{
    
    
    //定义一个静态内部类
    static class innerClass{
    
    
        //定义一个成员变量
        private static int num = 10;
        public void print(){
    
    
            System.out.println("num = " + num);
        }
    }
}

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

  1. 静态内部类只能访问外部类的静态成员。
  2. 在静态内部类只能定义静态成员,而非静态内部类不可以定义静态成员。
  • 方法内部类
        在方法中定义的类称为方法内部类,该类只能在该方法中使用。
    实例:
public class Example08 {
    
    
    public static void main(String[] args) {
    
    
        OuterClass outerClass = new OuterClass();
        outerClass.print();
    }
}
class OuterClass{
    
    
    //定义一个成员变量
    private int num = 20;
    public void print(){
    
    
        //定义一个方法内部类
        class MethodInnerClass{
    
    
            //定义一个方法
            public void print(){
    
    
                System.out.println("num = " + num);
            }
        }
        //创建内部类对象并调用内部类方法
        new MethodInnerClass().print();
    }
}

加油吧!!!

猜你喜欢

转载自blog.csdn.net/qq_42494654/article/details/109210698
今日推荐