将子类添加到 ArrayList 时遇到问题
Trouble adding subclass to ArrayList
我在将我的子类:Martian 和 Saturner 添加到驱动程序中的 ArrayList 时遇到问题。
我收到 "cannot find symbol error",请问这是什么原因?
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"));
}
这无关紧要
我正在向这个 post 添加更多细节,因为它主要是代码,但这真的无关紧要,我只是输入这个,因为我必须这样做。我的问题简洁明了,代码不多,老实说我看不出问题。
你所有的类都是抽象的类,所以它们不能被实例化。
在你的情况下:覆盖 Alien sub类 中的 invades() 方法并删除 '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);
}
编辑:
跟进我们在评论中的讨论,下面是应该有效的示例代码
Alien.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());
}
}
}
输出为:
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
我不确定您是否在使用 IDE(如 Eclipse),但我强烈建议您使用它来帮助调试。在这个例子中,所有这些 类 都在 src 文件夹的同一个默认包中。
我在将我的子类:Martian 和 Saturner 添加到驱动程序中的 ArrayList 时遇到问题。
我收到 "cannot find symbol error",请问这是什么原因?
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"));
}
这无关紧要 我正在向这个 post 添加更多细节,因为它主要是代码,但这真的无关紧要,我只是输入这个,因为我必须这样做。我的问题简洁明了,代码不多,老实说我看不出问题。
你所有的类都是抽象的类,所以它们不能被实例化。 在你的情况下:覆盖 Alien sub类 中的 invades() 方法并删除 '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);
}
编辑:
跟进我们在评论中的讨论,下面是应该有效的示例代码
Alien.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());
}
}
}
输出为:
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
我不确定您是否在使用 IDE(如 Eclipse),但我强烈建议您使用它来帮助调试。在这个例子中,所有这些 类 都在 src 文件夹的同一个默认包中。