Deklarationen in abstrakten Klassen und Interfaces

Hallo,

Ich habe folgende Fragen:

1. Können Datenkomponenten in abstrakten Klassen sowohl, public, privat als auch protected deklariert werden?
2. Gilt das was für Datenkomponenten in abstrakten Klassen gilt auch für deren Methoden?
3. Dürfen abstrakte Methoden ein Parameterliste haben?
4. Können in Interfaces Datenkomponenten deklariert werden? Wenn ja, mit allen oben genannten Sichtbarkeitsstati?
5. Dürfen Methoden eines Interfaces eine Parameterliste haben?

Vielen Dank schon mal für Eure Hilfe, ich hab jetzt so viel gelesen, dass ich hier gerade beim Verständnis hänge ???:L
 
also ich habe mal ein Beispiel gemacht

Java:
abstract class Example 
{
	public String 	hallo="hi";
	private String  ciao ="bb";

	protected abstract String getCurrentPackage();
	public abstract void addition(int x, int y); /* Die IDE würde dir bei private sagen: Abstrakte Methoden dürfen nur public/protected sein */
}

interface IExample
{
	public String test ="abc"; /* ACHTUNG: hier steht eigentl: public final static String test="abc" */
	
	public void hallo(int test);
}

1. Wenn du damit variablen/referenzen meinst: ja
2. Methoden können nur public/protected sein (bei Interfaces: nur public)
3. ja natürlich
4. nein nur public (afaik würde er aus : [c]int test=5; [/c] [c]public final static int test=5;[/c] machen) dazu
5. ja

MFG

Tomate_Salat
 
Zuletzt bearbeitet von einem Moderator:
2. Methoden können nur public/protected sein (auch bein Interfaces!)
Der TO sprach von Methoden einer abstrakten Klasse, nicht von abstrakten Methoden.
Methoden einer abtrakten Klasse können auch private sein.

Interfaces lassen nur public-Methoden zu, kein protected.
 
Zuletzt bearbeitet:
Java:
public abstract class Foo {
  public void bar1() { // nicht-abstrakte methode in abstrakter klasse
    System.out.println("Hello, World");
  }
  public abstract void bar2(); // abstrakte methode
}
 
Der TO sprach von Methoden einer abstrakten Klasse, nicht von abstrakten Methoden.
Methoden einer abtrakten Klasse können auch private sein.

Ja bin mal davon ausgegangen, dass sich seine Fragen auf die abstrakten Methoden bezogen haben.

Interfaces lassen nur public-Methoden zu, kein protected.
Ouh ja hast, recht. Die stelle hätte ich mir nochmal durchlesen sollen vorher, ich editiers mal um.

Edit abstrakte Methoden werden erst später definiert:

Java:
abstract class Animal
{	
	public abstract String getType();
	
	public void doIdentify() 
	{
		System.out.println("Ich bin ein " + getType());
	}
}

class Dog extends Animal
{

	@Override
	public String getType() 
	{
		return "Hund";
	}
	
}
 
Zuletzt bearbeitet von einem Moderator:
Ja bin mal davon ausgegangen, dass sich seine Fragen auf die abstrakten Methoden bezogen haben

Sie 😉

Ok...also abstrakte Methoden dürfen sowohl als public also auch privat und protected deklariert sein und Methoden eines INterfaces müssen public sein?
Beide Arten von Methoden dürfen eine Parameterliste besitzen?

Und wenn ich es richtig verstanden habe, dürfen in abstrakten Klassen auch Methoden deklariert werden die nicht abtrakt sind. Welchen Vorteil hat das? Dürfen die dann überschrieben werden? Oder werden die nur vererbt?
 
Nicht-abstrakte Methoden in abstrakten Klassen können auch überschrieben werden. Man benutzt sie aber i.a. dann, wenn mehrere nicht-abstrakte Klassen von dieser abstrakten Klasse erben, und diese Methoden für alle erbenden Klassen gleich sind
Java:
abstract class Basisklase
{
    void fürAlleGleich() { mach was bestimmtes }
    void auchFürAlleGleich() { mach was anderes bestimmtes }

    abstract void wasSpezielles();
}

class ErsterErbender extends Basisklase
{
    void wasSpezielles() // Konkrete Implementierung der methode
    {
        // Kann die nicht-abstrakten Methoden der abstrakten Basisklasse verwenden
        fürAlleGleich();
        auchFürAlleGleich();
    }
}

class ZweiterErbender extends Basisklase
{
    void wasSpezielles() // Konkrete Implementierung der methode
    {
        // Kann die nicht-abstrakten Methoden der abstrakten Basisklasse verwenden
        fürAlleGleich();
        machWasWasNurDieZweiteKlasseMacht();
        auchFürAlleGleich();
    }

    pvivate void machWasWasNurDieZweiteKlasseMacht() { ... }
}
 
Der Anfänger 😉

Ok...also abstrakte Methoden dürfen sowohl als public also auch privat und protected deklariert sein
Nein, abstrakte Methoden sind nur public oder protected. Methoden in abstrakten Klassen, die selbst nicht abstrakt sind, können alles sein.
Lässt sich übrigens auch logisch erklären, wenn man weiß, was private bedeutet. Auf private Methoden hat man in einer Kind-Klasse keinen Zugriff mehr. Aber abstrakte Klassen sind nur dazu da, überschrieben zu werden. Darum hat eine private abstrakte Klasse keinen Sinn.

und Methoden eines INterfaces müssen public sein?
Beide Arten von Methoden dürfen eine Parameterliste besitzen?
Ja. Wenn Du Dir irgendwo unsicher bist - ausprobieren.
 
Der Anfänger 😉

Kleiner Täuschungsversuch 😉. War gestern Nacht bei der Namensgebung nicht mehr kreativer.


Nein, abstrakte Methoden sind nur public oder protected.
Upps, das privat war reingerutscht😳 danke noch mal für deinen Hinweis!


Ja. Wenn Du Dir irgendwo unsicher bist - ausprobieren.
Bin fleißig dabei. Was bestimmt weitere Fragen zu Java aufwerfen wird. 😉

Danke für Eure Unterstützung:toll:

VG Stefie
 

Zurück
Oben