Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- abstrakte klasse (http://www.informatikerboard.de/board/thread.php?threadid=1988)


Geschrieben von neuling96 am 08.12.2014 um 17:28:

  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();



Geschrieben von eulerscheZahl am 08.12.2014 um 17:40:

 

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.



Geschrieben von neuling96 am 08.12.2014 um 17:48:

 

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();?



Geschrieben von eulerscheZahl am 08.12.2014 um 17:59:

 

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.



Geschrieben von neuling96 am 08.12.2014 um 18:10:

 

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?



Geschrieben von eulerscheZahl am 08.12.2014 um 18:16:

 

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?



Geschrieben von neuling96 am 08.12.2014 um 18:28:

 

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



Geschrieben von eulerscheZahl am 08.12.2014 um 18:32:

 

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.



Geschrieben von neuling96 am 08.12.2014 um 18:37:

 

vielen lieben dank!! smile



Geschrieben von neuling96 am 18.01.2015 um 20:25:

 

"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);
}

}





Geschrieben von eulerscheZahl am 19.01.2015 um 07:04:

 

Wenn du eine abstrakte Klasse implementieren willst, darfst du nicht abstract in den Methodenkopf schreiben, genau das soll es ja nicht mehr sein.



Geschrieben von neuling96 am 19.01.2015 um 11:39:

 

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);
}

}




Geschrieben von Karlito am 19.01.2015 um 11:54:

 

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



Geschrieben von neuling96 am 19.01.2015 um 13:10:

 

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);
}

}




Geschrieben von eulerscheZahl am 19.01.2015 um 13:25:

 

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.


Forensoftware: Burning Board, entwickelt von WoltLab GmbH