2017-04-07 1 views
-1

Ich habe zwei Klassen, wie folgt:Kann ich ein Objekt zu einer anderen Klasse aufrufen?

public class JavaApplication12 { 

public static void main(String[] args) { 
    NewClass aclass = new NewClass("rabbit", "bungalow"); 
    System.out.println(aclass.toString()); 
}} 

und

public class NewClass { 
String animal; 
String building; 

public NewClass(String A, String B){ 
animal=A; 
building=B;} 

NewClass class1 = new NewClass("cat", "house"); 
NewClass class2 = new NewClass("dog", "shed"); 

@Override 
public String toString(){ 
    return animal+building; 
}} 

So habe ich ein Objekt aClass in JavaApplication12 genannt und ich in der Lage gewesen, eine toString dieser auszudrucken. Ich möchte in der Lage sein, auch einen toString der Objekte class1 und class2 in NewClass auszugeben, aber ich möchte sie in JavaApplication12 drucken, da dies die Hauptklasse ist, die ich ausführen kann. Wenn ich nur war zu

System.out.println(class1.toString()); 

in JavaApplication12 schreiben, es wäre natürlich nicht wissen, was zu tun ist, da es nicht das Objekt Class1 in JavaApplication12 sehen kann. Gibt es eine Möglichkeit, den toString der Klasse 1 in JavaApplication12 auszudrucken?

EDIT

Also ich denke, ich herausgefunden habe, dass ich nicht die Katze, Hund speichern, usw. Informationen in der Art und Weise habe ich - ich denke, vielleicht ist dies, wie ich es geschafft haben, einige Leute zu verwirren Es tut mir Leid! Gibt es eine Möglichkeit, Informationen wie diese in einer zweiten Klasse zu speichern und sie in einer Hauptklasse aufrufen zu können, dh ich möchte cat, dog in JavaApplication1 drucken, aber diese Informationen in NewClass speichern und auch viele davon speichern andere Informationen dieser Art. Wäre das eine ArrayList? Sorry nochmal für Verwirrung.

+6

Ich verstehe deine Frage nicht, auch nachdem ich sie zweimal gelesen habe. – meriton

+0

Kudos zu den Antworten, solch ein schwierig zu verstehend ques – Vipin

+0

Machen 'Klasse1' und' class2' öffentlich oder fügen Sie getters für den Zugriff auf diese von einem anderen Platz hinzu. –

Antwort

1

Ich bin nicht sicher über Ihre Frage, aber Ill versuchen zu beantworten: Sie haben statische Variablen und "normale" Variablen. Wenn Sie ein Objekt einer Klasse erstellen, erstellen Sie auch jede normale Variable dafür. Zum Beispiel:

class Foo { 
public int a; //For each obj 
public static int b=3; //Global var of the class, acessable from anywhere 
public Foo(int a) { 
this.a=a; 
} 
} 

System.out.println(new Foo(0).a); //-> 0 

und natürlich gibt es statische Variablen, und dort nicht für jedes Objekt, dort in der Klasse.

System.out.println(Foo.b); //-> 3 

Und so können Sie auch objs von derselben Klasse in der Klasse, Beispiel haben:

public Foo f; 

Lösung 1: Wie auch einige andere haben vorschlagen, können Sie sie zu Ihrem Haupt bewegen Methode:

public class JavaApplication12 { 

public static void main(String[] args) { 
    NewClass aclass = new NewClass("rabbit", "bungalow"); 
    NewClass class1 = new NewClass("cat", "house"); 
    NewClass class2 = new NewClass("dog", "shed"); 
    System.out.println(aclass.toString()); 
}} 

und

public class NewClass { 
String animal; 
String building; 

public NewClass(String A, String B){ 
animal=A; 
building=B;} 


@Override 
public String toString(){ 
    return animal+building; 
}} 

Zugriff auf Haupt:

System.out.println(class1.toString()); 

Lösung 2: Machen Sie sie statisch, so dass Sie sie von Ihrem Hauptverfahren Acess kann

public class NewClass { 
String animal; 
String building; 
public static NewClass class1 = new NewClass("cat", "house"); 
public static NewClass class2 = new NewClass("dog", "shed"); 

public NewClass(String A, String B){ 
animal=A; 
building=B;} 


@Override 
public String toString(){ 
    return animal+building; 
}} 

dann sind sie in Haupt zugegriffen:

System.out.println(NewClass.class1.toString()); 

Beachten Sie, dass Sie nicht die endlose Rekursion G_H haben werden.

Lösung 3: Lassen Sie sie für jeden obj (nur, wenn Sie es so brauchen)

public class NewClass { 
String animal; 
String building; 
public NewClass class1 = new NewClass("cat", "house"); 
public NewClass class2 = new NewClass("dog", "shed"); 

public NewClass(String A, String B){ 
animal=A; 
building=B;} 


@Override 
public String toString(){ 
    return animal+building; 
}} 

Hinweis Sie sie von einem obj zugreifen müssen, zum Beispiel aClass:

System.out.println(aclass.class1.toString()); 

Diese Lösung bietet auch mehr Flexibilität, da Sie dort unterschiedliche Werte für verschiedene Objekte haben können, z. B. wenn jedes Tier zwei Nachbarn hat

0

hinzufügen public Modifikator vor den class1 und class2 Felder oder eine getter method bieten. Dann tun Sie dies in Ihrer Hauptklasse:

System.out.println(aclass.class1.toString()); 
System.out.println(aclass.class2.toString()); 

oder wenn Sie Getter-Methoden zur Verfügung gestellt:

System.out.println(aclass.getClass1().toString()); 
System.out.println(aclass.getClass2().toString()); 
0

Wenn ich es richtig verstanden, erstellt Sie class1 und class2 als Attribute von NewClass Sie haben um dann zu Ihrer Hauptmethode zu gelangen. Und dann drucken, wie Sie mit aclass wie dies tat:

public class JavaApplication12 { 
    public static void main(String[] args) { 
     NewClass aclass = new NewClass("rabbit", "bungalow"); 
     System.out.println(aclass.toString()); 
     NewClass class1 = new NewClass("cat", "house"); 
     System.out.println(class1.toString()); 
     NewClass class2 = new NewClass("dog", "shed"); 
     System.out.println(class2.toString()); 
    } 
} 

public class NewClass { 
    String animal; 
    String building; 

    public NewClass(String A, String B){ 
    animal=A; 
    building=B;} 

    // move these two lines to main 
    //NewClass class1 = new NewClass("cat", "house"); 
    //NewClass class2 = new NewClass("dog", "shed"); 

    @Override 
    public String toString(){ 
     return animal+building; 
    } 
} 
0

Instanziieren ein Objekt vom Typ NewClass wird unweigerlich zu einem Fehler Stackoverflow in Ihrem Fall führen. Warum? Weil Sie class1 und class2 als Instanzfelder definiert haben, die sofort zugewiesen werden. Sie sind wiederum Instanzen von NewClass.

Was bedeutet, dass, wenn Sie dies tun:

NewClass aclass = new NewClass("rabbit", "bungalow"); 

es auch diese beiden Felder zu erstellen versucht:

NewClass class1 = new NewClass("cat", "house"); 
NewClass class2 = new NewClass("dog", "shed"); 

was wiederum das gleiche tun. Es ist eine endlose Rekursion zum Erstellen neuer Objekte.

Ich schlage vor, Sie zuerst lesen, was Klassen und Instanzen sind, wie Konstruktoren arbeiten, Feldzugriff und Sichtbarkeit und der Unterschied zwischen Instanzfeldern und statischen Feldern.Befolgen Sie einige Java-Tutorials, um die Konzepte der Objektorientierung zu verstehen.

Verwandte Themen