不从另一个类导入

时间:2013-11-05 16:20:03

标签: java

好的,我有以下代码:

package executive;

import animals.*;

public class MainFile {

    public static void main(String[] args) {

        dog Robbie;
        Robbie = new dog();

        Robbie.lick();
        Robbie.jump();


    }

}

在包装动物中,我有级狗(是的,我知道这是一个非常无用的程序):

package animals;

public class dog {

    void lick() {
        System.out.println("lick lick");
    }
    void jump() {
        System.out.println("Whihoooo");
    }
}

但如果我正在运行此代码(eclipse),我会收到错误消息: “来自类型狗的方法lick()是不可见的 来自类型狗的方法jump()不可见“

有这个问题的大多数人都没有公开上课,但我有。 在我将狗类放在同一个包中时,代码运行良好。

6 个答案:

答案 0 :(得分:2)

没有任何访问修饰符的默认可见性对于世界是不可见的。

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

答案 1 :(得分:1)

两种方法的当前可见性是package-private(没有显式修饰符),这意味着只能从同一个包中的类访问它们。 由于MainFiledog不在同一个包中,因此无法访问这些方法。 您需要将2个方法声明为public。

答案 2 :(得分:0)

因为您的方法lickjump是包私有的,即仅在包动物中可见

回答你的问题:让它们成为公共方法,或者如果需要包私有,请将MainFile类移到动物包中

答案 3 :(得分:0)

将方法声明为public

public void lick()

取自this website

  

默认访问修饰符意味着我们没有为类,字段,方法等显式声明访问修饰符。在没有任何访问控制修饰符的情况下声明的变量或方法可用于同一包中的任何其他类。接口中的字段隐式为public static final,接口中的方法默认为public。

access modifier在变量或方法声明之前是publicprivateprotected这个词。


我在这儿的时候,看看Java Naming Conventions。这些命名约定旨在使所有代码都可读,并采用标准格式。

您的第一个错误是dog课程的命名。名称应为Dog,因为所有类都以大写字母开头。

您的第二个错误是您的变量名称Robbie。这应该是robbie,因为所有对象引用和变量都应以小写字母开头。如果变量有多个单词,则以小写字母开头,所有后续单词以大写字母值开头。例如validVariableName

答案 4 :(得分:0)

这些方法很明显,因为它们不公开。让它们公开,它应该工作 因为即使导入包

,其他包也看不到没有访问修饰符的方法
package animals;

public class dog {

    public void lick() {
        System.out.println("lick lick");
    }
    public void jump() {
        System.out.println("Whihoooo");
    }
}

答案 5 :(得分:0)

Java Access Modifiers

方法需要访问修饰符和类。

如果不使用访问修饰符,则默认名称为“package private”,这意味着只有同一包中的类才能调用该方法。

如果您希望方法可供其他包中的类调用,则应将访问修饰符更改为public