Hejsan!
Har en nybörjarfråga som rör abstrakta metoder.
Vad är det som skiljer en abstrakt metod från en vanlig metod, och i vilka sammanhang är det bättre att använda en abstrakt metod än en vanlig metod?
4 svar · 2 146 visningar · startad av Blårand
Hejsan!
Har en nybörjarfråga som rör abstrakta metoder.
Vad är det som skiljer en abstrakt metod från en vanlig metod, och i vilka sammanhang är det bättre att använda en abstrakt metod än en vanlig metod?
Abstrakta metoder används i interface och abstrakta klasser.
Abstrakta metoder har inget innehåll, dvs man skapar ingen funktionskropp till metoden.
vanlig metod:
public void metod() { // innehåll }
abstrakt metod:
public void abstraktMetod(); // observera ; !!
Idén är att man kan skapa ett interface, som inte innehåller nån funktionalitet, utan bara berättar namnen på metoderna.
T ex för en bil så kan man skapa ett interface med abstrakta metoderna:
public interface Bil
{
public abstract void startaMotorn();
public abstract void stängMotorn();
public abstract void svängHöger();
}
Skapar du en klass som implementerar interfacet Bil, så måste du skapa de metoder som deklareras i interfacet, dvs startaMotorn(), stängMotorn(), svängHöger() ...
Kom ihåg att gränsnsitt aldrig kan innehålla kompletta metoder, utan endast statiska, konstanta värden samt abstrakta metoder.
Abstrakta klasser däremot kan innehålla kompletta metoder men de måste innehålla minst en(!) abstrakt metod.
En abstrakt klass kan aldrig instansieras direkt.
AbstraktKlass klass = new AbstraktKlass(); // går inte!
Du måste skapa en klass som ärver från den abstrakta klassen och för att den inte också ska vara abstrakt, måste du implementera den asbtrakta metoden i bas-klassen, annars måste även den ärvda klassen vara en abstrakt klass.
Tack för förklaringen. Även om jag inte greppar allt till 100%, så tror jag att jag är hyfsat med. Men detta ser ut att vara något man får lära sig eller nöta in via pratisk kodning. :)
Här har du konkreta exempel på en interface, samt en abstrakt klass.
Pröva med att kommentera bort en av metoderna i klassen Volvo och kompilera om. Se vad som händer.
public interface Bil
{
public abstract void startaMotorn();
public abstract void stängAvMotorn();
public abstract void gasa();
}
public class Volvo implements Bil
{
public Volvo()
{
}
public void startaMotorn()
{
}
public void stängAvMotorn()
{
}
public void gasa()
{
}
}
public abstract class Bil
{
public abstract void startaMotorn();
public abstract void stängAvMotorn();
private int fart;
public void gasa()
{
fart = fart + 5;
}
}
// observera att jag har skapat en komplett metod i den abstrakta klassen bil. Det funkar! Testa med att ta bort en av de abstrakta metoderna från klassen Bil...
public class Saab extends Bil
{
public Volvo()
{
}
public void startaMotorn()
{
}
public void stängAvMotorn()
{
}
public void gasa()
{
}
}
Stort tack för hjälpen! :)
Fick inte kodsnutten att fungera fullt ut, men jag förstår principen nu med ditt tydliga exempel. Asbtrakta metoder används för att strukturera upp det hela, när man har klasser som man vill ska utföra samma saker, fast på olika sätt och med olika förutsättningar.