Java模块封装demo

问题描述 投票:0回答:1

我尝试创建一个演示来说明模块封装。 我在不同的模块中有 2 个类 a.A 和 b.B。 模块a需要b,b导出到a

package a;
import b.B;
class A{
    public static void main(String[] args){
        B b = new B();
    }
}
package b;
public class B{
    public B(){
        System.out.println("B created");
    }
}
module a {
  requires b;
}
module b {
  exports b to a;
}
├───class
├───jar
└───src
    ├───a
    │   └───module-info.java
    │   └───a
    │       └───A.java
    ├───b
    │   └───module-info.java
    │   └───b
    │       └───B.java

有效

>javac -d class --module-source-path src -m a
>jar -c -f jar/a.jar -e a.A -C class/a .
>jar -c -f jar/b.jar  -C class/b .
>java -p jar -m a
B created

但是,为什么我能够从默认包中的其他类访问 b.B

import b.B;
class C{
    public static void main(String[] a){
        B b = new B();  
    }
} 
>javac -cp ".;jar/b.jar" C.java
>java -cp ".;jar/b.jar" C
B created

openjdk版本“17.0.1”2021-10-19

java java-module
1个回答
0
投票

据我所知,您没有明确地将

C
放入模块中。因此它位于“未命名模块”中。未命名的模块可以读取每个可观察的模块。

未命名模块读取每个可观察模块

它的设计方式是为了让旧的非模块化代码仍然可以与新代码交互。

© www.soinside.com 2019 - 2024. All rights reserved.