0

好的,我有以下代码:

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),我会收到错误消息:“dog 类型的方法 lick() 不可见 dog 类型的方法 jump() 不可见”

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

4

6 回答 6

2

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

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

于 2013-11-05T16:23:07.683 回答
1

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

于 2013-11-05T16:23:37.610 回答
0

Because your methods lick and jump are package private i.e. the are only visible within package animal

to answer your question: make them either public methods or if package private is desirable move MainFile class into animal package

于 2013-11-05T16:21:55.797 回答
0

将方法声明为public

public void lick()

取自本网站

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

access modifier单词在哪里publicprivate或者protected在变量或方法声明之前。


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

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

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

于 2013-11-05T16:23:01.680 回答
0

这些方法是不可见的,因为它们不是公开的。将它们公开,它应该可以工作因为没有访问修饰符的方法即使在导入包时对其他包也不可见

package animals;

public class dog {

    public void lick() {
        System.out.println("lick lick");
    }
    public void jump() {
        System.out.println("Whihoooo");
    }
}
于 2013-11-05T16:24:50.117 回答
0

Java 访问修饰符

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

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

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

于 2013-11-05T16:25:52.373 回答