2017-05-24 4 views
0

Ich versuche, über Benutzereingaben auf den Superklassenvariablennamen zuzugreifen. Ich bin mir nicht sicher, wie der Name der Superklassenvariablen auf die Benutzereingabe zeigen soll. Hier ist der Code dafür. Irgendwelche Ideen, danke.Zugriff auf Superklassenvariablen über Benutzereingabe

package chapter4; 
    import java.util.Scanner; 

    public class VetOffice extends Animal { 

     public VetOffice(int lifeExpectancy, int weight, String name, Character gender, String type) { 
      super(lifeExpectancy, weight, name, gender, type); 
      // TODO Auto-generated constructor stub 
     } 
     public static void main(String[] args) { 

     Scanner console = new Scanner(System.in); 

       System.out.print("Please enter name of pet"); 
       //super(name); 
       //= console.next(); 
     //} 
     } 
    } 
    //} 
+0

kann es hilfreich sein, wenn Sie die 'Tier: ein Tier Super-Klasse gemeinsam nutzen können. –

+0

'VetOffice' ** erbt ** die Eigenschaft (Felder und Methoden) seiner Oberklasse' Tier'. Also, wenn es 'Getter' &' Setter' Methoden in der Oberklasse gibt, können Sie sie in der Unterklasse verwenden. – Yahya

+0

'VetOffice' erweitert' Animal' ??? Das ist eine rote Flagge genau dort ... –

Antwort

0

Die Sache ist, dass Sie nicht super Klassenvariablen in main Methode zugreifen können. Weil es static Methode ist. Wenn Sie auf main() zugreifen möchten, müssen Sie Animal Klasse name Variable auf statisch machen. Dann können Sie einen Wert direkt in main() eingeben.

So:

in Tierklasse,

static String name; 

in VetOffice,

name = console.next(); 

Sie können verschiedene Arten versuchen, auf die Sache abhängig, die Sie Sie gehen erreichen müssen entscheiden,

Ist diese Variable kann als static oder deklariert werden nicht? Weil static Variablen für jedes Objekt gemeinsam sind.

Ein anderer Weg, dies zu tun ist,

erstellen Getter und Setter für Animal Klasse Membervariablen. Dann können Sie auch nicht auf die main-Methode zugreifen, da Sie auch diese Methoden und Variablen auf statisch setzen müssen.

Als Lösung ohne sie statisch oder ein neuer Methoden auch Getter und Setter in Superklasse makinng Sie Standardkonstruktors für Superklasse erstellen und Werte zuweisen wie unten:

Wenn Ihre Variable in der Superklasse private Sie ist müssen Getter und Setter erstellen.

public static void main(String[] args) { 
    Scanner console = new Scanner(System.in); 
    System.out.print("Please enter name of pet"); 

    VetOffice pet = new VetOffice(); 
    pet.name = console.next(); 
    System.out.println(pet.name); 
} 

Hinweis: Standardkonstruktors erstellen Wenn es nicht notwendig Objekt aus VetOffice oder Superklasse seeing zu erstellen, die Sie Wert Konstruktor übergeben müssen.

UPDATE:

nach Ihren Kommentar

Wenn Ihre Variable in der Superklasse private dies tun:

public static void main(String[] args) { 
    Scanner console = new Scanner(System.in); 
    System.out.print("Please enter name of pet"); 

    VetOffice pet = new VetOffice(); 
    pet.setName(console.next()); 
    System.out.println(pet.getName()); 
} 

Ein anderer Weg, die Sie im Kommentar gefragt:

Tierklasse (teilweise implementiert, um Ihnen zu zeigen)

public class Animal { 
    int lifeExpectancy; 
    static int weight; 
    static String name; 

    Animal(int lifeExpectancy, int weight, String name, Character gender, String type){ 
     this.weight = weight; 
     this.name = name; 
    } 

    public static String getName() { 
     return name; 
    } 
    public static void setName(String n) { 
     name = n; 
    } 
} 

dann im Hauptverfahren:

Animal.setName(console.next()); 
System.out.println(Animal.getName()); 
+0

Ich habe Getter und Setter in der Tierklasse. Wie erstelle ich ein VetOffice-Objekt? Wie rufe ich den setName() in VetOffice auf. –

+0

Ok, ich verstehe das, aber warum sollte ich nicht die Variable Super aufrufen, um auf den Variablennamen der Superklasse zuzugreifen. –

+0

@Derrick C 'super()' ist keine Variable. Lies dies - https://stackoverflow.com/questions/44134360/inheritance-with-constructor-in-java/44135109#44135109 – Blasanka