Fragen Klasse vs Instanz

kathrin1

Mitglied
hallo,

ich hab hier ein paar fragen, bei denen ich mir nicht so ganz sicher bin, ob ich die richtig beantwortet habe.

"objekte einer klasse können ausschließlich durch einen konstruktor aufruf erzeugt werden"

würde ich sagen ja.


"instanzmethoden dürfen auf klassenattribute zugreifen"
richtig?

"Klassenmethoden drüfen auch instanzattribute zugreifen"
soweit ich weiß ist das falsch weil klassenmethoden nur auf klassenattribute zugreifen können?

"zwei objekte der selben klassen besitzen stehts identische methoden"

falsch?

"pro quelldatei darf es in einem java programm nur eine public klasse geben"

richtig?

"ein private attribut darf nur durch public methoden verändert werden"
wahrscheinlich falsch?


gruß kathrin
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
wäre schön wenn du bei jedem noch Begründung zu deinen Vermutungen schreiben würdest,
auf die man eingehen könnte statt nur Lösungen zu nennen (bzw. zu versuchen),

> "Klassenmethoden drüfen auch instanzattribute zugreifen"
> soweit ich weiß ist das falsch weil klassenmethoden nur auf klassenattribute zugreifen können?

wenn du weißt was ein Objekt ist und was stattdessen statisch ist, sind solche Zusammenhänge doch klar,
Instanzattribute gibt es nur wenn es auch Instanzen gibt, eine statische Methode könnte aber auch ausgeführt werden, ohne dass je ein Objekt dieser Klasse existiert hat, dann ist doch klar dass der Zugriff gar nicht denkbar ist,
falls es aber ein oder mehrere Objekte der Klasse gibt und die statische Methode diese kennt, dann kann sie strenggenommen auch auf dessen Instanzattribute zugreifen, sogar wenn diese private sind

sofern das zählt wäre also der Zugriff denkbar, strukturell im Grunde nicht vorgesehen,
was du nun daraus machen willst als Antwort musst du selber wissen
 
Zuletzt bearbeitet von einem Moderator:

Swoop

Gesperrter Benutzer
"zwei objekte der selben klassen besitzen stehts identische methoden"

falsch?

ich würde sagen richtig. Ein Object a hat die gleichen Methoden wie Object b!

"pro quelldatei darf es in einem java programm nur eine public klasse geben"

richtig?

meinst du die Main methode?

"ein private attribut darf nur durch public methoden verändert werden"
wahrscheinlich falsch?

genau falsch.

Gruß Swoop
 

schalentier

Gesperrter Benutzer
Das ist nicht erlaubt, es darf nur genau eine public class in einer Datei geben.

Java:
public class Foo {
  public class Bar {
  }
}

Das sind zwei public Klassen in einer Quellcodedatei. Das ist halt das Problem an Multiple Choice, es ist oftmals nicht eindeutig. Ich wuerde vermutlich "richtig" ankreuzen (nur eine Klasse pro Datei), oder "falsch" und obige 4 Zeilen mit auf den Zettel kritzeln und hoffen das der Test von einem Mensch korrigiert wird...
 

Andi_CH

Top Contributor
"zwei objekte der selben klassen besitzen stehts identische methoden"

falsch?
Nein: richtig! Die Objekte sind identisch haben identische Methoden und identische Attribute
Nur die Werte der Attribute unterscheiden sich im Allgemeinen.

"pro quelldatei darf es in einem java programm nur eine public klasse geben"

richtig?
Jein - Es gibt genau eine public Klasse die gleich heisst wie die Datei. Innerhalb dieser public klasse darf es weitere public Klassen geben. Im folgenden Code ist die Klasse Test50 korrekt, aber eigentlich heisst die ja Test5.Test50

Die Klasse Test51 ist nicht korrekt: Fehlermeldung
Code:
The public type Test51 must be defined in its own file

Die Klassen Test52 und Test53 sind auch ok ist hingegen korrekt und gültig. Ich würde zwar davon abraten Konstrukte wie 52 und 53 zu verwenden. Klassen innerhalb von Klassen ist schon eher sauber, auch wenn es nicht exzessiv betrieben werden sollte :)

Java:
public class Test5 {
	public class Test50 {
	}
}
public class Test51 {
}

abstract class Test52 {
}

final class Test53 {
}
 
Zuletzt bearbeitet:

Landei

Top Contributor
"objekte einer klasse können ausschließlich durch einen konstruktor aufruf erzeugt werden"
nein, auch durch clone() oder Deserialisierung

"instanzmethoden dürfen auf klassenattribute zugreifen"
ja

"Klassenmethoden drüfen auch instanzattribute zugreifen"
nein.

"zwei objekte der selben klassen besitzen stehts identische methoden"
ja.

"pro quelldatei darf es in einem java programm nur eine public klasse geben"
ja.

"ein private attribut darf nur durch public methoden verändert werden"
nein.
 

kathrin1

Mitglied
"objekte einer klasse können ausschließlich durch einen konstruktor aufruf erzeugt werden"
nein, auch durch clone() oder Deserialisierung

"instanzmethoden dürfen auf klassenattribute zugreifen"
ja

"Klassenmethoden drüfen auch instanzattribute zugreifen"
nein.

"zwei objekte der selben klassen besitzen stehts identische methoden"
ja.

"pro quelldatei darf es in einem java programm nur eine public klasse geben"
ja.

"ein private attribut darf nur durch public methoden verändert werden"
nein.

danke:)
 
G

Gonzo17

Gast
Java:
public class Foo {
  public class Bar {
  }
}

Das sind zwei public Klassen in einer Quellcodedatei. Das ist halt das Problem an Multiple Choice, es ist oftmals nicht eindeutig. Ich wuerde vermutlich "richtig" ankreuzen (nur eine Klasse pro Datei), oder "falsch" und obige 4 Zeilen mit auf den Zettel kritzeln und hoffen das der Test von einem Mensch korrigiert wird...



"pro quelldatei darf es in einem java programm nur eine public klasse geben"
ja.

Ja wie jetzt? ???:L
 

Andi_CH

Top Contributor
Das Beispiel von Schalentier und auch meines zeigen dasselbe (es zeigt sich auch wieder einmal mehr, dass die poster nicht den ganzen Thread lesen :-( )

Auf oberster Ebene darf es nur eine public Klasse geben!
Darin verschachtelt können weitere public Klassen vorkommen.

Beantworte die Frage ruhig mit "JA - es darf nur eine Klasse geben" denn die Klasse Bar von Schalentier oder meine Test50 sind nicht direkt ansprechbar sondern nur über die umschliessende Klasse

foo.bar.....

Aber jetzt mal eine Frage: warum probierst du das nicht einfach aus?

Java:
public class Test {

	public static void main (String[] args) {
		Foo bargruender = new Foo();
		Foo.Bar meineLieblingsbar =  bargruender.createBar();
		meineLieblingsbar.order("Capirinha");
	}
}

Java:
public class Foo {
	public class Bar {
		public void order(String drink) {
			System.out.println("Hey Mixer - make a " + drink);
		}
	}
	
	public Bar createBar() {
		return new Bar();
	}
}


(By the way: Gibt es echt keine Möglichkeit Bar direkt zu instanzieren?
Java:
new Foo.Bar()
 

Andi_CH

Top Contributor
Also mehrere public Klassen sind unter bestimmten Bedingungen möglich und verwendbar

Java:
public class Test2 {
	public static void main (String[] args) {
		Foo bargruender = new Foo();
		Foo.Bar meineLieblingsbar =  bargruender.createBar("Strandbar");
		meineLieblingsbar.order("Capirinha");
		Foo.Bar meineLieblingsbar2 = new Foo().new Bar("Sandbar");
		meineLieblingsbar2.order("Sandwich");
	}
}

Java:
public class Foo {
	public class Bar {
		private String mName;
		public Bar (String pName) {
			mName = pName;
		}
		public void order(String drink) {
			System.out.println("Bar " + mName + " Hey Mixer - make a " + drink);
		}
	}
	
	public Bar createBar(String pName) {
		return new Bar(pName);
	}
}
 

schalentier

Gesperrter Benutzer
Java:
public class Foo {
  public static class Bar {
  }
}

new Foo.Bar();

Das geht auch. Und von Top-Level-Class (heisst das so?) hab ich nix gelesen in der Frage.
 

tfa

Top Contributor
Ja aber ich wollte eben nicht static hinschreiben :) obwohl ich keinen grossen Unterschied weiss.

Ohne static ist es eine "inner Class". Mit static eine ganz normale Klasse, die in einer anderen "nested" definiert ist. Ein Objekt einer inner Class braucht immer ein äußeres Objekt, deswegen new Foo().new Bar(). Bei der statischen Klasse ist das nicht so. Wenn möglich sollte man immer die statische Variante wählen.
 

reibi

Top Contributor
Das geht auch. Und von Top-Level-Class (heisst das so?) hab ich nix gelesen in der Frage.

Bin der selben Meinung wie das Schalentier!

Absolut korrekte Ausdrucksweise kann man auch von einem, und gerade von einem (Programmier)Lehrer erwarten.(Boolsche Algebra !!!)
Gibt der Dir keine Punkte für die Frage, würd ich Ihm das Gegenteil beweisen und bei ner Diskussion ein Fass aufmachen


;-)
 

schalentier

Gesperrter Benutzer
Naja, ohne das static hat die Klasse Bar immer eine Referenz auf eine Instanz von Foo (Zugriff aus Bar: Foo.this). Deshalb brauchst du immer auch eine Instanz von Foo.

Mit static ist Bar eine ganz normale Klasse, ohne Bezug zu Foo, ausser das man halt immer Foo.Bar schreiben muss.
 

Neue Themen


Oben