找不到符号:使用“javac”命令在 public class java 上实现的默认访问接口(在不同的 src 文件中声明)
Cannot find symbol : default access interfaces(declared in different src file) implemented on a public class java using `javac` command
这是一个非常新手的问题,但我无法从第一个源文件('F:/Java_Practice/src/listpage1/interfaceTest/InterfaceCan.java;`)在 public class 在第二个源文件中(F:/Java_Practice/src/listpage1/interfaceTest/InterfaceCan1.java;)。请阐明这一点。谢谢!
/* 源文件名listpage1.interfaceTest.InterfaceCan1.java */
package listpage1.interfaceTest;
import static java.lang.System.out;
public interface InterfaceCan1
{
int iCan_var = 2;
void iCanMethod();
}
class PackageInfo
{
void packInfo()
{
out.println("This package is meant to contain all the interfaces used for testing the behavior of interfaces.");
}
}
interface I1
{
int i1_var = 1;
void i1Method();
}
interface I1x extends I1
{
int i1x_var = 10;
void i1xMethod();
}
interface I2x extends InterfaceCan1
{
int i2x_var = 20;
void i3xMethod();
}
interface I3
{
int I3 = 3;
void i3Method();
}
//Another source file: listpage1.interfaceTest.InterfaceTest.java
package listpage1.interfaceTest;
import static java.lang.System.out;
public class InterfaceTest implements I1//This line is throwing error
{
public void i1Method()
{
out.println("Inside the method InterfaceTest.i1Method()");
}
public static void main(String[] s)
{
TestInterface1 ob1 = new TestInterface1();
out.println(ob1.i_var);
ob1.iMethod();
out.println(ob1.iCan_var);
ob1.iCanMethod();
}
}
interface I
{
int i_var = 0;
void iMethod();
}
class TestInterface1 implements I, InterfaceCan1, I1
{
public void iMethod()
{
out.println("Inside the method TestInterface1.iMethod().");
}
public void iCanMethod()
{
out.println("Inside the method TestInterface1.iCanMethod()");
}
public void i1Method()
{
out.println("Inside the method TestInterface1.i1Method()");
}
}
class InterfaceTest2 implements I1
{
public void i1Method()
{
out.println("Inside the method TestInterface1.i1Method()");
}
}
Compilation Error:
listpage1\interfaceTest\InterfaceTest.java:6: error: cannot find symbol
public class InterfaceTest implements I1
^
symbol: class I1
1 error
非常感谢评论中的帮助。我终于弄明白为什么我不编译程序了。
为了在使用 -d 选项编译时检测到接口
(通过它 .class 文件被放置在不同的目录中)
例如:我使用的目录结构:
F:/Java_Practice/src
这包含所有 .java 文件。我正在编译该文件夹中的所有文件,并使用以下命令将生成的 .class
文件放入 F:/Java_Practice/class
文件夹中:
“F:\Java_Practice\src>javac -d F:/Java_Practice/class listpage1/interfaceTest/InterfaceTest.java
”(参考有问题的代码)
该接口的 .class
和所有其他 class 被放置在另一个目录中(在本例中:'F:/Java_Practice/class')。现在需要在使用 -classpath 选项编译 .java 文件时指定该目录,如下所示:
F:\Java_Practice\src>javac -d F:/Java_Practice/class -classpath .;F:/Java_Practice/class listpage1/interfaceTest/InterfaceTest.java
有趣的是,如果您在编译时错过了 -classpath 选项,您仍然能够访问 所有 public classes 和 public 接口!但是,要访问 default-access classes 和接口 ,您将 必须在 javac
中包含 -classpath
命令
请通过此 link 了解有关设置 class 路径的更多详细信息:
http://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html
这是一个非常新手的问题,但我无法从第一个源文件('F:/Java_Practice/src/listpage1/interfaceTest/InterfaceCan.java;`)在 public class 在第二个源文件中(F:/Java_Practice/src/listpage1/interfaceTest/InterfaceCan1.java;)。请阐明这一点。谢谢!
/* 源文件名listpage1.interfaceTest.InterfaceCan1.java */
package listpage1.interfaceTest;
import static java.lang.System.out;
public interface InterfaceCan1
{
int iCan_var = 2;
void iCanMethod();
}
class PackageInfo
{
void packInfo()
{
out.println("This package is meant to contain all the interfaces used for testing the behavior of interfaces.");
}
}
interface I1
{
int i1_var = 1;
void i1Method();
}
interface I1x extends I1
{
int i1x_var = 10;
void i1xMethod();
}
interface I2x extends InterfaceCan1
{
int i2x_var = 20;
void i3xMethod();
}
interface I3
{
int I3 = 3;
void i3Method();
}
//Another source file: listpage1.interfaceTest.InterfaceTest.java
package listpage1.interfaceTest;
import static java.lang.System.out;
public class InterfaceTest implements I1//This line is throwing error
{
public void i1Method()
{
out.println("Inside the method InterfaceTest.i1Method()");
}
public static void main(String[] s)
{
TestInterface1 ob1 = new TestInterface1();
out.println(ob1.i_var);
ob1.iMethod();
out.println(ob1.iCan_var);
ob1.iCanMethod();
}
}
interface I
{
int i_var = 0;
void iMethod();
}
class TestInterface1 implements I, InterfaceCan1, I1
{
public void iMethod()
{
out.println("Inside the method TestInterface1.iMethod().");
}
public void iCanMethod()
{
out.println("Inside the method TestInterface1.iCanMethod()");
}
public void i1Method()
{
out.println("Inside the method TestInterface1.i1Method()");
}
}
class InterfaceTest2 implements I1
{
public void i1Method()
{
out.println("Inside the method TestInterface1.i1Method()");
}
}
Compilation Error:
listpage1\interfaceTest\InterfaceTest.java:6: error: cannot find symbol
public class InterfaceTest implements I1
^
symbol: class I1
1 error
非常感谢评论中的帮助。我终于弄明白为什么我不编译程序了。 为了在使用 -d 选项编译时检测到接口 (通过它 .class 文件被放置在不同的目录中)
例如:我使用的目录结构:
F:/Java_Practice/src
这包含所有 .java 文件。我正在编译该文件夹中的所有文件,并使用以下命令将生成的 .class
文件放入 F:/Java_Practice/class
文件夹中:
“F:\Java_Practice\src>javac -d F:/Java_Practice/class listpage1/interfaceTest/InterfaceTest.java
”(参考有问题的代码)
该接口的 .class
和所有其他 class 被放置在另一个目录中(在本例中:'F:/Java_Practice/class')。现在需要在使用 -classpath 选项编译 .java 文件时指定该目录,如下所示:
F:\Java_Practice\src>javac -d F:/Java_Practice/class -classpath .;F:/Java_Practice/class listpage1/interfaceTest/InterfaceTest.java
有趣的是,如果您在编译时错过了 -classpath 选项,您仍然能够访问 所有 public classes 和 public 接口!但是,要访问 default-access classes 和接口 ,您将 必须在 javac
中包含 -classpath
命令
请通过此 link 了解有关设置 class 路径的更多详细信息: http://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html