温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java Private 私有内部类怎么用

发布时间:2026-07-24 02:15:07 来源:亿速云 阅读:102 作者:小樊 栏目:编程语言

在 Java 中,私有内部类(private inner class)指的是private 修饰的成员内部类。它只能被外部类内部访问,不能被外部(其他类)直接访问,是一种很强的封装手段。

下面从定义、使用场景、示例代码、要点总结来讲解。


一、什么是私有内部类

class Outer {
    private class Inner {
        public void say() {
            System.out.println("I am private inner class");
        }
    }
}
  • Innerprivate
  • 只能在 Outer 中使用
  • 外部类无法直接 new Outer.Inner()

二、基本用法示例

1️⃣ 定义私有内部类

public class Outer {

    private class Inner {
        public void print() {
            System.out.println("Hello from Inner");
        }
    }

    public void useInner() {
        Inner inner = new Inner();
        inner.print();
    }
}

2️⃣ 外部使用(只能通过外部类)

public class Test {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.useInner();
    }
}

✅ 输出:

Hello from Inner

不能这样写:

Outer.Inner inner = new Outer.Inner(); // 编译错误

因为 Innerprivate


三、私有内部类访问外部类成员

私有内部类可以直接访问外部类的所有成员(包括 private):

public class Outer {

    private String name = "Outer";

    private class Inner {
        public void show() {
            System.out.println(name); // 直接访问
        }
    }

    public void test() {
        new Inner().show();
    }
}

四、外部类如何创建私有内部类对象

必须在外部类的方法中创建

public class Outer {

    private class Inner {
    }

    public Inner createInner() {
        return new Inner();
    }
}

外部:

Outer outer = new Outer();
Object obj = outer.createInner(); // 只能用 Object 或接口接收

五、常见使用场景

✅ 1. 隐藏实现细节(强烈封装)

public class Outer {

    private class InnerImpl {
        void doWork() {}
    }

    public void work() {
        new InnerImpl().doWork();
    }
}

外部完全不知道 InnerImpl 存在。


✅ 2. 配合接口使用(非常常见)

public class Outer {

    private class Inner implements Runnable {
        public void run() {
            System.out.println("Running");
        }
    }

    public Runnable getRunner() {
        return new Inner();
    }
}

外部只知道 Runnable,不知道实现类。


✅ 3. 构建器 / 迭代器模式

public class MyList {

    private class MyIterator {
        void next() {}
    }

    public Object iterator() {
        return new MyIterator();
    }
}

六、private 内部类 vs 其他内部类

类型 修饰符 外部是否可访问
私有内部类 private ❌ 不可
默认内部类 无修饰 ✅(同包)
protected 内部类 protected ✅(子类 / 同包)
public 内部类 public

七、重要注意点

  1. private 内部类不能包含 static 成员(除常量)

    private class Inner {
        static int x = 10; // ❌ 编译错误
        static final int Y = 10; // ✅
    }
    
  2. 不能通过 Outer.Inner 访问

  3. 主要价值是封装,不是复用


八、一句话总结

Java 私有内部类用于“只在外部类内部使用”的实现细节封装,外部完全不可见,只能通过外部类间接使用。

如果你愿意,我可以再给你:

  • 私有内部类 vs 匿名内部类
  • 私有内部类在 JDK 源码中的例子
  • 和 Kotlin / C++ 嵌套类的对比
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI