Given the default classpath:
/foo
And this directory structure:
foo
|
test
|
xcom
|--A.class
|--B.java
And these two files:
package xcom;
public class A { }
package xcom;
public class B extends A { }
Which allows B.java to compile? (Choose all that apply.)
A. Set the current directory to xcom
then invoke
javac B.java
B. Set the current directory to xcom
then invoke
javac -classpath . B.java
C. Set the current directory to test then invoke
javac -classpath . xcom/B.java
D. Set the current directory to test then invoke
javac -classpath xcom B.java
E. Set the current directory to test then invoke
javac -classpath xcom:. B.java
The answer is C, I don't understand the use of the operator .
there. Please explain.
The book says:
"In order for B.java
to compile, the compiler first needs to be able to find B.java
.
Once it's found B.java
, it needs to find A.class
. Because A.class
is in the
xcom
package the compiler won't find A.class
if it's invoked from the xcom
directory.
Remember that the -classpath
isn't looking for B.java
, it's looking for whatever classes B.java
needs (in this case A.class
)."
I don't get this, if both files are on the same package, why wouldn't the compiler find A?