Avatar billede qumle Nybegynder
04. august 2005 - 15:05 Der er 11 kommentarer og
1 løsning

override af metoder

Jeg har en super klasse med en metode med implementation

class Super{
  public method1(){
  ...
  ...
}
}

nu vil jeg gerne lave en subclasse som tvinger alle yderliger subklasser til at lave en ny implementation af method1.

class Sub extends Super{
abstract public method1();
}

i alle klasser som arver fra Sub vil jeg gerne have at compileren tvinger programøren til at lave en ny implementation af method1.

class SubSub extends Sub{
//her skal laves implementation af method1 men compileren brokker sig ikke
}

det som går galt er jo tydeligvis at den bare bruger implementationen fra Super.
Mit spørgsmål går på om der findes et keyword jeg kan sætte foran metodesignaturen i Sub så implementationen fra Super ignoreres??
Avatar billede simonvalter Praktikant
04. august 2005 - 15:17 #1
public class Super {
    public void method1(){
       
    }
}

abstract class Sub extends Super{
    abstract public void method1();
   
}

class SubSub extends Sub{

    public void method1() {
   
    }
}
Avatar billede arne_v Ekspert
04. august 2005 - 15:19 #2
jeg får fejl hvis SubSub ikke implementerer method1 !
Avatar billede simonvalter Praktikant
04. august 2005 - 15:22 #3
jeg kan heller ikke se hvordan du kan gøre dette:

class Sub extends Super{
abstract public method1();
}

En klasse der har en abstract metode vil smide en compile-time fejl hvis den ikke er abstract.
Avatar billede arne_v Ekspert
04. august 2005 - 15:23 #4
simon>

jeg har ligesom dig smidt 3 x void + 1 x abstract ind
Avatar billede simonvalter Praktikant
04. august 2005 - 15:39 #5
arne nu har jeg læst hvad ud har skrevet et par gange og er stadig lidt forviret over hvad du mener ;-)

15:19:46 er vel også meningen ?

15:22:33 var til spørger.

Kan også godt være jeg sidder og sover og måske skulle overveje at gå i seng.
Avatar billede arne_v Ekspert
04. august 2005 - 15:45 #6
jeg læser spørgsmålet som at spørger ikke ser hvad jeg ser i 15:19:46
Avatar billede qumle Nybegynder
04. august 2005 - 16:27 #7
hmm min kode virker åbenbart som forventet alligevel, Jeg kan compile på to forskellige måde i mit IDE (lang historie).

men jeg fik den til at brokke sig over manglende implementation i SubSub, min kode ser sådan her ud og det tvinger SubSub til at lave en implementation af method1()

class Super{
  public method1(){
  ...
  ...
}
}
class Sub extends Super{
abstract public method1();
}

class SubSub extends Sub{
//her skal laves implementation af method1 men compileren brokker sig ikke
}
Avatar billede simonvalter Praktikant
04. august 2005 - 16:39 #8
Hvordan kan du gøre det her?
class Sub extends Super{
abstract public method1();
}
Avatar billede qumle Nybegynder
09. august 2005 - 20:16 #9
hvordan jeg kan det...
tja det kan jeg altså, compileren brokker sig i hvert fald ikke. Det jeg gør er at override metoden fra superklassen og så erklære den for abstract så jeg tvinger sub klasser af denne klasse til at lave en implementering. ok det var vist en gentagelse af spørgsmålet men jeg ved ikke hvad jeg ellers skal svare, jeg syns os selv det ser lidt mærkeligt ud men det virker efter hensigten
Avatar billede arne_v Ekspert
09. august 2005 - 20:18 #10
har du ikke

abstract class Sub extends Super{
abstract public method1();
}

?
Avatar billede simonvalter Praktikant
09. august 2005 - 20:22 #11
Ifølge java language specification er det ihvertfald ikke muligt. Hvad er det for en compiler du bruger?
Avatar billede simonvalter Praktikant
09. august 2005 - 20:23 #12
Prøv og lav en instans af Sub og kald metoden på den :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester