无法对非静态java进行静态引用

时间:2015-05-03 18:22:34

标签: java arrays

我正在努力学习java。如果我的概念不明确或非常错误,请原谅我。 我正在尝试创建继承和多态应用程序。

我创建了一系列动物[5]。我试图将狗,猫的参考添加到阵列。 我希望它能坚持下去 动物[0] = zooDog

我收到了错误 不能对非静态

进行静态引用

我创建了AnimalstestDrivve类

package animals;

public abstract class Animals {
    private String Name;
    private int Size; //Size on the scale 1 to 10

    public void eatFood(){
        System.out.println("I am eating food");
    }

    public void sleep(){
        System.out.println("I am sleeping now");
    }

    abstract public void makeNoises();

}

这是我的动物类

package animals;

public class Dog extends Animals {
    public void makeNoises(){
        System.out.println("Bow! bow!");
    }
}

简单的狗,猫类

import copy
def inception(wordlist):

    # dont want to mutilate original list
    new_wordlist = copy.deepcopy(wordlist)

    # find length of wordlist to know when original length is traversed
    word_count = len(new_wordlist)
    output_set = set()
    output_list = [] # flags existence, -1 = evaluation postponed, 0 = exclude, 1= include
    eval_list = []

    # iterate through list
    for idx, word in enumerate(new_wordlist):
        inner_words = word.split()

        # if its only 1 word, evaluate at the end 
        # Can be made smarter to reject earlier
        if len(inner_words) == 1 and idx < word_count:
            output_list.append(-1)
            eval_list.append(word)
            new_wordlist.append(word)
            continue        

        # Flag existence of inner words if they haven't been found
        existence = 0
        for in_wrd in inner_words:
            if in_wrd in output_set:
                output_list.append(0)       
            else:
                # keep continued 
                existence += 1
                output_set.add(in_wrd)
                output_list.append(existence)
            eval_list.append(in_wrd)

    # now evaluate by position of flags
    final_set = set()
    for idx, word in enumerate(eval_list):
        if output_list[idx] > 0:

            # combine if words are in order
            if output_list[idx] > 1:
                final_set.remove(eval_list[idx-1])
                word = ' '.join([eval_list[idx-1], eval_list[idx]])
            final_set.add(word) 
    return list(final_set)

3 个答案:

答案 0 :(得分:2)

main方法(static)尝试调用addAnimals方法,该方法的声明是非静态的。您需要先创建该类的实例,然后在此实例上调用该方法

AnimalstestDrive testDrive = new AnimalstestDrive();
Dog zooDog = new Dog();
testDrive.addAnimals(zooDog);

有关详细信息,请参阅Understanding Class Members

答案 1 :(得分:0)

您需要拥有AnimalstestDrive类的实例。静态意味着您不需要该类的任何实例来使用类方法,因此如果您将addAnimals标记为静态,则可以使用该方法而无需创建AnimalstestDrive的实例。

答案 2 :(得分:0)

因为方法update不是静态的,所以您需要创建addAnimals的实例才能使用该函数。 当方法不是静态时,它特定于该类的实例。例如:

AnimalstestDrive

如果方法是静态的,则它不是特定于类的实例,而是特定于类本身。

如果您将此方法放在课程AnimalstestDrive atd = new AnimalstestDrive(); atd.addAnimals(new Dog()); // this will add animals to "atd" 中:

AnimalstestDrive

您只能使用public static void staticMethod() { } 访问它,而不是AnimalstestDrive.staticMethod()

有关静态方法的更多信息here