无法在同一个包中实例化公共类

时间:2015-11-07 23:53:34

标签: java access-modifiers

所以我制作了这个java文件A.java,

package alphabet;


public class A{
   private  String private_A;
   String _A;
   protected String protected_A;
   public String public_A;

   public A(){
      private_A="Private A";
      _A="Package Private A";
      protected_A="Protected A";
      public_A="Public A";
  }
  public static void main(String[] args) {

  }
}

和同一个包中的另一个类

package alphabet;

import alphabet.A;

public class B{
    void methodB1(){
    }
    public static void main(String[] args) {
        A AinB = new A();

    }
}

当我编译B时,我无法实例化A。 这是为什么? A是公共类,B属于同一个包吗? B不能A的实例?

这很漂亮,但谢谢。

编辑:发现了这些错误,

*@*:~/rand$ javac B.java 
B.java:3: error: cannot find symbol
import alphabet.A;
               ^
  symbol:   class A
  location: package alphabet
B.java:9: error: cannot find symbol
                A AinB = new A();
                ^
  symbol:   class A
  location: class B
B.java:9: error: cannot find symbol
                A AinB = new A();
                             ^
  symbol:   class A
  location: class B
3 errors

编辑:删除仍然收到这些错误的导入语句

B.java:9: error: cannot find symbol
                A AinB = new A();
                ^
  symbol:   class A
  location: class B
B.java:9: error: cannot find symbol
                A AinB = new A();
                             ^
  symbol:   class A
  location: class B
2 errors

4 个答案:

答案 0 :(得分:4)

由于您的类是包字母表,因此您需要将它们放在名为alphabet的子目录中,然后使用以下命令行从其父目录运行javac:

javac alphabet/B.java

答案 1 :(得分:4)

问题是你编写错了。由于您正在使用包,因此在编译时您需要在包外。

而不是javac B.java

创建一个与包名称相同的文件夹/目录,即alphabet,并将java文件移动到它。

使用javac alphabet/B.java

答案 2 :(得分:1)

删除B类中的import语句。您不需要从同一个包中导入。

答案 3 :(得分:-1)

你有2个主要方法,你应该只有1个用于启动程序的方法,尝试在be中创建一个A对象或者你想先运行的任何类:

package alphabet;


public class A{
 private  String private_A;
String _A;
protected String protected_A;
public String public_A;

public A(){
  private_A="Private A";
  _A="Package Private A";
  protected_A="Protected A";
  public_A="Public A";
  }
  public static void main(String[] args) {
    B bclass = new B();
    bclass.yourmethod();
  }
}