Наследование классов для текстовой игры - PullRequest
0 голосов
/ 22 февраля 2011

Я пытаюсь создать текстовую игру для класса, и я застрял при попытке заставить мой основной класс, GCPUAPP, читать из моего класса Артефактов.

Вот код, который явведено для класса GCPUAPP:

Artifact artifact=new Artifact();
artifact.name="Harry Potter and the Deathly Hallows";
artifact.description="Harry and his friends save the qizarding world again";
r1.contents=artifact;
dialog();

Это дает мне ошибку на "новом Артефакте".Вот код, который у меня есть на Artifact:

public abstract class Artifact{ 

    String name, description;

    public String toString(){
        return name;
}

Я новичок в Java, поэтому я полностью застрял.

Ответы [ 3 ]

4 голосов
/ 22 февраля 2011

Вы не можете создать экземпляр абстрактного класса Artifact artifact=new Artifact();

В этом смысл абстрактных классов. Только неабстрактные классы, которые наследуют абстрактный класс, могут быть экземплярами объекта.

Либо удалите нотацию abstract из определения класса, либо создайте другой класс, который наследует Artifact, и вызовите конструктор как Artifact artifact=new MyNewArtifact();

1 голос
/ 18 июля 2017

Вы не можете создать экземпляр абстрактной переменной.Таким образом, AbstractClass ac=new AbstractClass() выдаст ошибку во время компиляции.Вместо этого вам нужен другой класс для наследования от абстрактного класса.Например:

public abstract class AbstractClassArtifact{ 

    String name, description;

    public String toString(){
        return name;
}

Затем используйте:

 public class Artifact extends AbstractClassArtifact{
   public Artifact(String name, String description){ //Constructor to make setting variables easier
     this.name=name;
     this.description=description;
   }
 }

Наконец создайте с помощью:

 Artifact artifact=new Artifact("Harry Potter and the Deathly Hallows", "Harry and his friends save the qizarding world again");
 r1.contents=artifact.toString();
 dialog();
0 голосов
/ 22 февраля 2011

Я бы сделал это

class HarryPotterArtifact extends Artifact {

    // no need to declare name and desc, they're inherited by "extends Artifact"

    public HarrayPotterArtifact(String name, String desc) {
         this.name = name;
         this.desc = desc;
    }
}

Используйте это так:

//Artifact artifact=new Artifact();
//artifact.name="Harry Potter and the Deathly Hallows";
//artifact.description="Harry and his friends save the qizarding world again";

  String harryName = "Harry Potter and the Deathly Hallows";
  String harryDesc = "Harry and his friends save the qizarding world again";
  Artifact artifact = new HarryPotterArtifact(harryName,harryDesc);
...