我对java很陌生,并且遇到了错误
一个包含.是必需的
当从与父类定义在同一个源文件中的子类创建新对象时,而不是当子类有自己的源文件时,我想了解其中的原因。
主要文件:
package tessty
public class Tessty {
public static void main(String[] args) {
Person me = new Person();
me.addtoitems();
}
}"Person“类的另一个源文件:
package tessty;
import tessty.Item.*; // I included this import as per NetBeans' suggestions
public class Person {
Item[] items;
public Person() {
items = new Item[3];
}
public void addtoitems() {
items[0] = new Apple(); // Compile error thrown here
items[1] = new Shoe(); // and here
items[2] = new Hat(); // but not here
}
}在同一个文件中定义了两个子类的"Item“类源文件:
package tessty;
public class Item {
int weight;
public class Apple extends Item {
public Apple() {
weight = 2;
}
}
public class Shoe extends Item {
public Shoe() {
weight = 3;
}
}
}最后,项目的另一个子项目,但定义在它自己的源文件中:
package tessty;
public class Hat extends Item {
public Hat() {
weight = 1;
}
}为了组织目的,我非常希望能够在同一个文件中定义父类中的子类(我正在处理的应用程序将有许多“小”子类)。请有人解释一下,为什么我只对与他们的父母在同一个源文件中的子类得到这个错误?这与我必须为父文件中的子类使用导入而不是对带有自己文件的子类使用导入有关吗?
发布于 2015-01-14 15:59:58
您需要使子类http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html才能正常工作。因为它们是http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html,但是在您的情况下使用这些是没有意义的。您还可以创建Item abstract,因为您不打算创建它的任何实例。
如果要在单个文件中创建非嵌套类,那么只有一个类可以是public (如第7.6节底部的根据联合法律第7条 )。因此,如果您想要多个公共的、非嵌套的子类,它们必须都位于单独的文件中。
package tessty;
public abstract class Item {
int weight;
public static class Apple extends Item {
public Apple() {
weight = 2;
}
}
public static class Shoe extends Item {
public Shoe() {
weight = 3;
}
}
}概括地说,课程是:
在嵌套集合中,它们是:
嵌套类是:
内部类接收对创建它的父类实例的隐式引用。静态成员类没有任何父实例的隐式知识。
发布于 2015-01-14 15:54:19
首先,您的Testty类不编译。在package语句之后,您错过了一个;:
package tessty;然后,您可以在一个源文件中定义超级类和子类,但是其中一个必须是public,并且只需要package语句一次(因为这两个类都是共享的)。例如:
package something;
public class SuperClass {
}
class SubClass extends SuperClass {
}源文件将被存储,必须命名为SuperClass.java。
或者,您可以使子类(Es)嵌套和static,正如@AndyBrown所回答的。
https://stackoverflow.com/questions/27947037
复制相似问题