【Java】面向对象进阶-内部类

前言

1.之前学过,因此本文是个人复习笔记,为视频的总结以及个人思考,可能不是很详细。

2.教程是b站黑马程序员的JAVASE基础课程,笔记中的大部分图片来自于视频中的PPT截图。

3.Java环境为Java SE 17.0.3.1,IntelliJ IDEA版本为2025.2

https://www.bilibili.com/video/BV1Cv411372m

内容概览

1.本文内容主要包括成员内部类,静态内部类,局部内部类,以及匿名内部类。

2.笔记对应视频111-112节

更新记录

内部类

如果一个类定义在另一个类的内部,这个类就是内部类

包括成员内部类,静态内部类,局部内部类,匿名内部类

成员内部类

类中成员

public class 外部类名{

public class 内部类名{

}

}

创建其对象

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

1.可以直接访问外部类的实例成员和静态成员。

2.拿到当前外部类对象, 外部类名.this

Outer.java

package com.zbhgis.object7;

public class Outer {
    public static String a;
    private int age = 99;

    public void test2() {
        System.out.println(age);
        System.out.println(a);
    }

    public class Inner {
        public static String schoolName; // JDK16开始支持
        private String name;
        private int age = 88;

        public void test() {
            System.out.println(age);
            System.out.println(a);

            int age = 66;
            System.out.println(age);
            System.out.println(this.age);
            System.out.println(Outer.this.age);
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

Obeject7Demo1.java

package com.zbhgis.object7;

public class Object7Demo1 {
    public static void main(String[] args) {
        Outer.Inner in = new Outer().new Inner();
        in.test();
    }
}

打印结果

88
null
66
88
99

静态内部类

有static类修饰的内部类,属于外部类自己持有。

public class 外部类名{

public static class 内部类名{

}

}

创建其对象

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

可以直接访问外部类的静态成员,不可以直接访问外部类的实例成员。

Outer2.java

package com.zbhgis.object7;

public class Outer2 {
    public static String schoolName;
    private int age;

    public static void test() {

    }

    public static void test2() {
        System.out.println(schoolName);
        // System.out.println(age); // 报错
    }

    public static class Inner2 {
        public static int a;
        private String name;

        public void test() {
            System.out.println(schoolName);
            // System.out.println(age); // 报错
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

Object7Demo2.java

package com.zbhgis.object7;

public class Object7Demo2 {
    public static void main(String[] args) {
        Outer2.Inner2 in2 = new Outer2.Inner2();
        in2.test();
    }
}

打印结果

null

局部内部类

局部内部类是定义在在方法中、代码块中、构造器等执行体中。

了解即可。

匿名内部类

特殊的局部内部类,通常作为一个参数传输给方法;

本质就是一个子类,并会立即创建出一个子类对象

New 类或接口(参数值){

类体(一般是方法重写);

}

Object7Demo3.java

package com.zbhgis.object7;

interface Swimming {
    void swim();
}

public class Object7Demo3 {
    public static void main(String[] args) {
        go(new Swimming() {
            @Override
            public void swim() {
                System.out.println("狗游得快");
            }
        });
    }

    public static void go(Swimming s) {
        System.out.println("开始");
        s.swim();
    }
}

打印结果

开始
狗游得快

总结

1.内部类在另一个类内部

2.匿名内部类本质就是一个子类,并会立即创建出一个子类对象

3.匿名内部类通常作为方法的函数

posted @ 2026-01-12 19:26  浩瀚地学  阅读(2)  评论(0)    收藏  举报