Just nu i M3-nätverket
Jump to content

overriding och abstrakta metoder?


lakris-loppan

Recommended Posts

lakris-loppan

Hej!

När man def. en abstrakt metod i en superklass och vill anropa den med hjälp av overriding(läste pa suns sida att man maste det?) sa gar det ju inte att använda super.print() tex om man vill anripa print... Jag provade att skriva metodehuvudet precis som i superklassen, även i subklassen och la sen till mina nya förändringar inom {} men förstar att inte heller det var riktigt. Är det nagon som vet hur man gör? eller var man kan läsa om det? Det skulle verkligen intressera mig hur det hela hänger i hop.

/l-l

 

Link to comment
Share on other sites

  • 1 month later...

Öh...

 

Jag kan inte påstå att jag förstår exakt vad du är ute efter... abstrakta metoder är för att tvinga konkreta subklasser att implementera metoder som har en specifik signatur, overriding är när subklasserna själva väljer att ändra vad en viss metod ska göra, istället för att köra med superklassens implementation.

 

Så man kan per definition inte "override'a" abstrakta metoder, eftersom det inte finns någon metod i superklassen till att börja med.

 

Detta är till exempel illegal kod:

 

public abstract void saySomething()
{
   System.out.println("Something");
}

 

Nedan är ett exempel med både overriding och abstrakta metoder.

 

KonkretEtt och KonkretTva implementerar bägge saySomethingBright eftersom dom måste. Men däremote ändrar KonkretEtt sayQuoted's beteende med overriding, och KonkretTva gör det detsamma med sayBye.

 

[log]

abstract class Abstrakt

{

public abstract void saySomethingBright();

 

public void sayHi()

{

System.out.println("Hi");

}

 

public void sayBye()

{

System.out.println("Bye");

}

 

public void say(String aSentence)

{

System.out.println(aSentence);

}

 

public void sayQuoted(String aSentenceToQuote)

{

System.out.println("Quote: \""+aSentenceToQuote+"\"");

}

}

 

 

class KonkretEtt extends Abstrakt

{

public void saySomethingBright()

{

say("Hi, this is KonkretEtt speaking");

sayQuoted("Fine day, innit?");

}

 

public void sayQuoted(String aSentenceToQuote)

{

System.out.println("KonkretEtt said: \""+aSentenceToQuote+"\"");

}

 

}

 

class KonkretTva extends Abstrakt

{

public void saySomethingBright()

{

sayHi();

sayQuoted("KonkretTva said hi!");

sayBye();

}

 

public void sayBye()

{

System.out.println("Bye bye for now.");

}

 

 

}

 

public class Abstr

{

public static void main(String[] args)

{

Abstrakt enRef = new KonkretEtt();

enRef.saySomethingBright();

enRef = new KonkretTva();

enRef.saySomethingBright();

}

}

[/log]

 

När man kör den koden så blir utskriften:

 

Hi, this is KonkretEtt speaking
KonkretEtt said: "Fine day, innit?"
Hi
Quote: "KonkretTva said hi!"
Bye bye for now.

 

Jag vet inte om du blev särskilt mycket klokare av det där... att förstå objektorientering med alla dess habrovinkler är rätt svårt för dom flesta....det var det för mig i alla fall. ;)

 

Link to comment
Share on other sites

lakris-loppan

Hej hej!

...och tack för svaret! Jag har redan lyckats lösa det hela själv, men det är intressant att läsa vad du skriver....och jag haller verkligen med om att objektorientering kan vara lite förvirrade ibland .....rätt ofta till och med...;-)

Tack för hjälpen!

/l-l

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...