Java 为什么我不需要进口一台主机呢?

Java 为什么我不需要进口一台主机呢?,java,Java,为什么我不需要在Main中导入A类?这是在某一点上使用的主要 有人能告诉我import指令是如何工作的吗?它在Main中没有实际使用。Main在任何时候都不引用称为a本身的类、它的任何方法或它的任何字段。编译器永远不需要知道您键入的是A,但实际上是A.A-这就是所有导入的目的。新的B.a可能会返回一个a,但Main并不在意,因为它会立即隐式地强制转换到对象。导入用于消除歧义。例如,如果您的项目中有2个Bfirstpackage.B和secondpackage.B类,并且您正在编写如下内容: im

为什么我不需要在Main中导入A类?这是在某一点上使用的主要


有人能告诉我import指令是如何工作的吗?

它在Main中没有实际使用。Main在任何时候都不引用称为a本身的类、它的任何方法或它的任何字段。编译器永远不需要知道您键入的是A,但实际上是A.A-这就是所有导入的目的。新的B.a可能会返回一个a,但Main并不在意,因为它会立即隐式地强制转换到对象。

导入用于消除歧义。例如,如果您的项目中有2个Bfirstpackage.B和secondpackage.B类,并且您正在编写如下内容:

import B.*;

public class Main {

    public static void main(String[] args) {

        Object obj = new B().a;
    }

}
Java编译器应该知道应该使用第一个或第二个包中的哪个类。
但是,当您从其他类调用B类的实例时,它已经定义好了,在这种情况下没有歧义。

主类从不使用类A的对象,因此不需要导入,您使用的是类B,而B使用的是A,这是另一回事。java在编译时会注意到这一点,因此依赖项不会嵌套,否则主类MUS会导入其对象内部使用/需要的所有内容

实际上,对A的引用是在运行时解析的,而不是在编译时解析的。小题大做,但觉得值得一提。
package B;

import A.*;

public class B {

    public A a;
}
import B.*;

public class Main {

    public static void main(String[] args) {

        Object obj = new B().a;
    }

}
B b = new B()