Inheritance 向ArrayList添加子类时遇到问题
我很难将我的子类:Martian和Saturner添加到驱动程序中的ArrayList中 我得到一个找不到符号的错误,有什么原因可以解释这可能是什么原因吗Inheritance 向ArrayList添加子类时遇到问题,inheritance,arraylist,subclass,extends,Inheritance,Arraylist,Subclass,Extends,我很难将我的子类:Martian和Saturner添加到驱动程序中的ArrayList中 我得到一个找不到符号的错误,有什么原因可以解释这可能是什么原因吗 import java.util.*; import java.io.*; abstract class Alien { private String planet; private String venus; private String name; private String skinColor;
import java.util.*;
import java.io.*;
abstract class Alien
{
private String planet;
private String venus;
private String name;
private String skinColor;
private String alienClass;
public Alien(String planet, String venus, String name, String skinColor, String alienClass)
{
this.planet=planet;
this.venus=venus;
this.name=name;
this.skinColor=skinColor;
this.alienClass=alienClass;
}
abstract void invade();
public String toString()
{
return name + "has" + skinColor + "skin, and is apart of the " + alienClass + "class" ;
}
public abstract class Martian extends Alien
{
public Martian(String p, String v, String n, String s, String a)
{
super(p,v,n,s,a);
}
}
public abstract class Saturner extends Alien
{
public Saturner(String p, String v, String n, String s, String a)
{
super(p,v,n,s,a);
}
abstract void invade();
{
System.out.println("The aliens are invading: ");
}
}
}
public class AlienDriver
{
public static void main(String[]args)
{
ArrayList<Alien> alienList = new ArrayList<>();
alienList.add(new Martian("Hookrah"));
}
这无关紧要
我在这篇文章中添加了更多的细节,因为它主要是代码,但这与实际情况无关,我之所以键入这篇文章,是因为我必须这样做。我的问题很清楚,也很简洁,代码也不多,老实说,我不认为问题出在哪里。所有的类都是抽象类,所以它们不能被实例化。 在您的例子中:覆盖外来子类中的invaive方法并删除'abstract'关键字
public class AlienDriver { // only one class have 'public' keyword in a file
public static void main(String[] args){
// do your stuff
}
}
abstract class Alien {
// constructor
...
abstract void invade(); // abstract method
}
class Martian extends Alien {
// constructor
...
@Override
void invade() {
// do something such as print line
}
}
// Same for Saturner
希望对您有所帮助。也许我没有看到它,但您似乎试图使用一个只接受一个参数的构造函数
new Martian("Hookrah")
但你定义的构造函数有5个参数
public Martian(String p, String v, String n, String s, String a)
{
super(p,v,n,s,a);
}
编辑:
继我们在评论中的讨论之后,下面是应该可以工作的示例代码
java
abstract class Alien
{
private String planet;
private String venus;
private String name;
private String skinColor;
private String alienClass;
public Alien(String planet, String venus, String name, String skinColor, String alienClass)
{
this.planet=planet;
this.venus=venus;
this.name=name;
this.skinColor=skinColor;
this.alienClass=alienClass;
}
abstract void invade();
public String toString()
{
return name + " has " + skinColor + " skin, and is apart of the " + alienClass + " class" ;
}
}
Martian.java
public class Martian extends Alien
{
public Martian(String p, String v, String n, String s, String a)
{
super(p,v,n,s,a);
}
@Override
void invade() {
// TODO Auto-generated method stub
}
}
Saturner.java
public class Saturner extends Alien
{
public Saturner(String p, String v, String n, String s, String a)
{
super(p,v,n,s,a);
}
void invade()
{
System.out.println("The aliens are invading: ");
}
}
AlienDriver.java
import java.util.ArrayList;
public class AlienDriver
{
public static void main(String[]args)
{
ArrayList<Alien> alienList = new ArrayList<>();
alienList.add(new Martian("MarPlanet", "MarVenus", "MarName", "MarSkinColor", "MarAlienClass"));
alienList.add(new Saturner("SatPlanet", "SatVenus", "SatName", "SatSkinColor", "SatAlienClass"));
for (Alien al : alienList) {
System.out.println("Class of Object: " + al.getClass().getName() + " || description = " + al.toString());
}
}
}
我不确定您是否正在使用像Eclipse这样的IDE,但我强烈建议您使用它来帮助调试。在本例中,所有这些类都在src文件夹的同一个默认包中。给出实际的编译器错误。错误为AlienDriver.java.60:错误:找不到符号alienst.addnew MartianHookrah;符号:类火星位置:类AlienDriver 1错误从超类和子类中删除抽象关键字?说到实现入侵,你的意思是像这个公共抽象类Saturner扩展了Alien implements Invact吗?@KelOkekpe:不是。看看你的代码,有几个错误。首先,您必须将所有Alien类及其子类移出AlienDriver。因为在java中,一个文件中只有一个公共类,所以从AlienDriver之外的其他类中删除“public”关键字。第二,从火星人和土星人中删除“抽象”关键字,因为你们想从外星人中扩展它们。最后,覆盖每个外来子类的抽象方法入侵。哇,谢谢,从子类中删除public完成了工作,谢谢你,KarenI解决了这个问题,但我不认为这是我出错的原因。我不能评论其他答案,因为我没有足够的声誉。但与删除抽象相关的是,它看起来类似于这个公共类Martian extends异形{public Martian String p,String v,String n,String s,String a{super,v,n,s,a;}@Override void invain{//INVATE实现因为它不是在外来基类中实现的,所以它必须在扩展它的任何类中实现}我这样做了,但仍然得到了相同的错误…我从除超类之外的所有内容中删除了单词abstract,但我仍然无法将子类添加到驱动程序中的ArrayList。@KelOkekpe我添加了显示每个不同类的示例代码,如果您对它有任何疑问,输出会告诉我。我使用了您提供的代码osted,现在我得到的错误是告诉我类Martian是公共的,应该在一个名为Martian.java的文件中声明,Saturner类也是如此……我保存了一个Martian.java和一个Saturner.java版本的代码,并尝试在AlienDriver.java下运行它,但没有成功。
Class of Object: Martian || description = MarName has MarSkinColor skin, and is a part of the MarAlienClass class
Class of Object: Saturner || description = SatName has SatSkinColor skin, and is a part of the SatAlienClass class