我正在努力学习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)
答案 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。