Class 您到底什么时候需要导入java?

Class 您到底什么时候需要导入java?,class,methods,import,java-7,Class,Methods,Import,Java 7,以下文件意外编译并运行,没有出现问题: import info.gridworld.actor.Actor; import java.util.ArrayList; public class ChameleonKid extends ChameleonCritter { public ArrayList<Actor> getActors() { ArrayList<Actor> actors = getGrid().getNeighbor

以下文件意外编译并运行,没有出现问题:

import info.gridworld.actor.Actor;
import java.util.ArrayList;

public class ChameleonKid extends ChameleonCritter
{
    public ArrayList<Actor> getActors()
    {
        ArrayList<Actor> actors = getGrid().getNeighbors(getLocation());
          ArrayList<Actor> frontBack = new ArrayList<Actor>();
          for(Actor i : actors)
              if(getLocation().getDirectionToward(i.getLocation())==getDirection())
                    frontBack.add(i);
        return frontBack;
    }
}
import info.gridworld.actor.actor;
导入java.util.ArrayList;
公共类变色龙儿童扩展变色龙骑士
{
公共数组列表getActors()
{
ArrayList actors=getGrid().getNeights(getLocation());
ArrayList frontBack=新的ArrayList();
(演员一:演员)
if(getLocation().getDirectionToward(i.getLocation())==getDirection())
加上(i);
返回前向;
}
}
Actor类中的方法getLocation()返回Location的实例。然后调用Location类的getDirectionToward()方法<代码>getLocation().getDirectionToward(i.getLocation())。这是怎么回事?我从未导入Location类。我如何使用它并调用它的方法?如果是这样的话,我什么时候需要导入一个类?只有在我实例化它的时候


我正在使用Java 7。

您不需要导入该类的原因是因为您没有显式地使用该类
Actor
是在本地实际使用
Location
类的角色。您从未持有对Location类的引用,因此,您可以动态地继续使用它。但是,如果您想保存引用(例如
Location l=getLocation();
),则必须导入
Location
,因为编译器必须将
l
与Location链接,但不知道在何处找到它。

假设您有两种方法,一个返回
foo.Location
,另一个返回
bar.Location
(两个完全不同的类恰好具有相同的名称,但在不同的包中-完全有效):

如果可以在同一类中同时使用这两个方法并链接某些方法,则不需要导入:

if(getFooLocation().onlyInFoo()) {
  //...
}
if(getBarLocation().onlyInBar()) {
  //...
}
它之所以能工作,是因为编译器完全确定您使用的是
Location
的哪个版本(来自哪个包),并且它知道
onlyInFoo()
onlyInBar
在哪里可用

但假设您需要一个局部变量:

Location location;
// much later
location = getFooLocation();
现在编译器实际上不知道
位置
您的意思是什么,所以您必须通过使用包继续使用类名来帮助他:

foo.Location location;
或者通过导入该类:

import foo.Location;
您现在应该问:如果我想同时拥有
foo.Location
bar.Location
的局部变量,该怎么办?当然,你不能同时导入它们:

//WRONG
import foo.Location;
import bar.Location;
您可以再次执行以下操作:要么根本不导入,要么使用完全限定名:

foo.Location location1;
bar.Location location;
…或仅导入一个位置:

import foo.Location;

//...
Location location1;     //foo.Location
bar.Location location2;

是的。我真的不需要这个来完成这个问题,但我只是想知道它。
import foo.Location;

//...
Location location1;     //foo.Location
bar.Location location2;