我想用drjava学习java。
当我尝试运行这段代码时,drjava告诉我:
静态错误:此类没有接受字符串[]的静态void main方法。
我不明白的是为什么drjava告诉我没有main。这是班级犬类申报后的第一行;我没有看到任何拼写错误或缺少标点符号。
我试着用谷歌搜索这个,但我不明白他们在说什么。
如果有人能给我一个线索,虽然不能给我答案,但却能让我自己弄清楚为什么会发生这种事,那就太好了——但是如果问题太简单,无法创造学习机会,那么我会采取解决办法;我想是吧。
/*
* This is an exercise designed to practice creating a class Animal
* And then creating another class canine in which to create an object dog.
* The reason I want to call from one class to another is because I want
* to understand how classes, objects, inheritance, etc. works.
* Clearly, class canine is -in my mind at least, a child of class Animal.
* The main method of canine then calls method attributes I think are being
* inherited by dog and wolf,from the class Animal.
*/
public class Animal {
void growl() {
System.out.println("Grrr");
}
void bark() {
System.out.println("Arf! Arf!");
}
}
class canine {
public static void main(String[]args) {
Animal dog = new Animal();
dog.bark();
Animal wolf = new Animal();
wolf.growl();
}
}
1条答案
按热度按时间isr3a4wc1#
这段代码和
java
命令行工具:java canine
当你这么做的时候java canine
,你会告诉java
用于查找和加载canine
类并运行其main
方法。如果你用的是
java Animal
,问题是Animal
没有main
.canine
做。显然,犬科动物至少在我看来,是动物类的孩子
不,两者之间没有关系
canine
以及Animal
除此之外canine
使用Animal
在它的main
. 例如。,canine
取决于Animal
但与此无关。如果您希望它是一个子类(对“child class”的一种相当合理的解释),您可以添加extends Animal
它的声明。如果您希望它是一个嵌套类(另一个相当合理的“子类”解释),您可以将它放在里面Animal
.根据您的评论:
但是我仍然不明白为什么drjava告诉我它没有接受string[]的静态void main方法。而且,当我运行drjava时,它不会打印任何东西。
我想你把
canine
在同一个文件中Animal
,制作Animal
public,然后期望drjava知道它应该运行canine.main
而不是Animal.main
. 请参阅下面有关最佳实践的注解。另一条评论:
但是没有
dog.bark()
直接调用中的函数Animal
? 为什么我需要在这个场景中“扩展”?你没有。一个类可以使用另一个类,而它们之间不存在任何继承关系,就像您的代码所做的那样。您在评论中使用的术语“子类”表明您打算继承或类似的东西。
旁注:虽然您不必遵循它们,但遵循标准java命名约定是一种很好的实践。类名应该以大写和大小写开头。所以呢
Canine
而不是canine
.旁注2:正如满是鳗鱼的气垫船所说,最好把每一类都放在自己的类别里
.java
文件,以类的名称命名。从技术上讲,你可以把非公共类放在任何地方.java
文件(这就是代码使用canine
在Animal.java
)但总的来说,最好的做法还是将它们分开。所以你应该Animal.java
包含Animal
班级,以及canine.java
包含canine
等级(或更好,Canine.java
包含Canine
类)。