abstrakte klasse |
neuling96 unregistriert
|
|
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();
|
|
08.12.2014 17:28 |
|
|
|
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.
__________________ Syntax Highlighting fürs Board (Link)
|
|
08.12.2014 17:40 |
|
|
neuling96 unregistriert
|
|
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();?
|
|
08.12.2014 17:48 |
|
|
|
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.
__________________ Syntax Highlighting fürs Board (Link)
|
|
08.12.2014 17:59 |
|
|
neuling96 unregistriert
|
|
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?
|
|
08.12.2014 18:10 |
|
|
|
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?
__________________ Syntax Highlighting fürs Board (Link)
|
|
08.12.2014 18:16 |
|
|
neuling96 unregistriert
|
|
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
|
|
08.12.2014 18:28 |
|
|
|
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.
__________________ Syntax Highlighting fürs Board (Link)
|
|
08.12.2014 18:32 |
|
|
neuling96 unregistriert
|
|
vielen lieben dank!!
|
|
08.12.2014 18:37 |
|
|
neuling96 unregistriert
|
|
"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);
}
}
|
|
|
|
18.01.2015 20:25 |
|
|
|
Wenn du eine abstrakte Klasse implementieren willst, darfst du nicht abstract in den Methodenkopf schreiben, genau das soll es ja nicht mehr sein.
__________________ Syntax Highlighting fürs Board (Link)
|
|
19.01.2015 07:04 |
|
|
neuling96 unregistriert
|
|
stimmt
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);
}
}
|
|
|
|
19.01.2015 11:39 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
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
|
|
19.01.2015 11:54 |
|
|
neuling96 unregistriert
|
|
sry das liegt an mir
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);
}
}
|
|
|
|
19.01.2015 13:10 |
|
|
|
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.
__________________ Syntax Highlighting fürs Board (Link)
|
|
19.01.2015 13:25 |
|
|
|