abstrakte klasse

Neue Frage »

Auf diesen Beitrag antworten »
neuling96 abstrakte klasse

Gegeben sei die folgende abstrakte Klasse:
code:
1:
2:
3:
4:
5:
6:
7:
8:
public abstract classSum{
public intplus(inta,intb)
{returna + b;}
public abstract booleanequals(Sum s);}
Die Klasse wird folgendermaßen verwendet:
public static voidmain(String[] args)
{Sum s =newSum();
s.plus(2,3);}

Die Verwendung der Klasse ist so nicht möglich . Wo liegt der Fehler? Wie kann man ihn beheben?

liegt der fehler hier {Sum s =newSum();
 
Auf diesen Beitrag antworten »
eulerscheZahl

Das Problem ist (neben ein paar fehlenden Leerzeichen), dass die Klasse abstrakt ist.
Mit einer abstrakten Klasse kann man so nichts anfangen.

Entweder du wirfst das abstract wieder raus, oder du erbst von besagter Klasse, implementierst du abstrakte Funktion und verwendest dann die geerbte Klasse.
Auf diesen Beitrag antworten »
neuling96

Entweder du wirfst das abstract wieder raus,
code:
1:
2:
3:
4:
5:
6:
7:
8:
public classSum{
public intplus(inta,intb)
{returna + b;}
public  booleanequals(Sum s);}
Die Klasse wird folgendermaßen verwendet:
public static voidmain(String[] args)
{Sum s =newSum();
s.plus(2,3);}


so?

und was genau macht der Ausdruck {Sum s =newSum();?
Auf diesen Beitrag antworten »
eulerscheZahl

Wenn du nur einen Funktionskopf und keine Implementierung hast (Funktion equals), dann ist sie abstract. Folglich muss die Funktion auch raus (oder implementiert werden)
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
public class Sum {
	public int plus(int a,int b) {
		return a + b;
	}

	//public boolean equals(Sum s);

	public static void main(String[] args) {
		Sum s = new Sum();
		s.plus(2,3);
	}
}


mit Sum s = new Sum(); erzeugst du eine Instanz der Klasse. Mit dieser Instanz kannst du dann die Funktionen aufrufen.
 
Auf diesen Beitrag antworten »
neuling96

Ich möchte die Funktion implementieren.


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
public class Sum {
	public int plus(int a,int b) {
		return a + b;
	}

	public boolean equals(Sum s);

public equals(Sum s);{
 return plus;
}
	public static void main(String[] args) {
		
Sum s = new Sum();
		s.plus(2,3);
	}
}


Ist das korrekt?
Auf diesen Beitrag antworten »
eulerscheZahl

Nein!

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
public class Sum {
	public int plus(int a,int b) {
		return a + b;
	}

	public boolean equals(Sum s) {
		//komplizierte Berechnungen
		return result;
	}

	public static void main(String[] args) {
		Sum s = new Sum();
		s.plus(2,3);
	}
}

Warum der Funktionskopf, bevor du die Funktion dann doch implementierst?
Warum das Semikolon direkt vor Beginn der Implementierung?
Auf diesen Beitrag antworten »
neuling96

vielen dank!!


was genau bedeutet?

s.plus(2,3)

meine vermutung:
dabei steht das s für die class sum
und plus für die Funktion/Methode public int plus
Auf diesen Beitrag antworten »
eulerscheZahl

Ja, das hast du richtig erkannt.

Eine Alternative wäre noch:
code:
1:
2:
3:
4:
5:
public static int plus(int a, int b) {
	return  a+ b;
}

Sum.plus(2, 3);


Wenn die Methode static ist, wird sie direkt über die Klasse aufgerufen, sonst über eine Instanz der Klasse.
Auf diesen Beitrag antworten »
neuling96

vielen lieben dank!! smile
Auf diesen Beitrag antworten »
neuling96

"Entweder du wirfst das abstract wieder raus, oder du erbst von besagter Klasse, implementierst du abstrakte Funktion und verwendest dann die geerbte Klasse. "

ich hab versucht, das zu implementieren

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
public class y extends Sum{

public abstact boolean (Sum s){
return true; // immer wahr
}
public static voidmain(String[] args){
Sum s =new y();
s.plus(2,3);
}

}


Auf diesen Beitrag antworten »
eulerscheZahl

Wenn du eine abstrakte Klasse implementieren willst, darfst du nicht abstract in den Methodenkopf schreiben, genau das soll es ja nicht mehr sein.
Auf diesen Beitrag antworten »
neuling96

stimmt Zunge raus

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
public class y extends Sum{

public  boolean (Sum s){
return true; // immer wahr
}
public static voidmain(String[] args){
Sum s =new y();
s.plus(2,3);
}

}

Auf diesen Beitrag antworten »
Karlito

Sag mal, wie gehst Du eigentlich vor? Kann es sein, dass Du nur mit einem Buch arbeitetest und die Quelltexte (falsch) abtippst? Keines der Programme, die Du hier gepostet hast kompiliert ohne weiteres, weil Leerzeichen, Namen oder sonstiges fehlen...

Gruß,

Karlito
Auf diesen Beitrag antworten »
neuling96

sry das liegt an mir unglücklich

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
public class y extends Sum{

public  boolean equals(Sum s){
return true; // immer wahr
}
public static void main(String[] args){
Sum s =new y();
s.plus(2,3);
}

}

Auf diesen Beitrag antworten »
eulerscheZahl

Aus deinen Screenshots schließe ich, dass du mit Texteditor und Eingabeaufforderung arbeitest.
Lade dir eclipse runter. eclipse.org
Da hast du beides in einem, eine Autovervollständigung und kannst dir den Code formatieren lassen.
Auf diesen Beitrag antworten »
neuling96

ja, das mit den texteditor ist korrekt.


P.S hab das programm runtergeladen, allerdings habe ich Schwierigkeiten das programm richtig zu nutzen
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »