Kan iemand mij uitleggen waarom het niet mogelijk is om de signatuur van constructoren vast te leggen in een interface of desnoods in een abstracte klasse?
Klinkt misschien vaag, dus ik zal het even toelichten met een voorbeeldje:
Constructor vastleggen in de interface kan niet; als ik bijvoorbeeld "public Picture(File file);" toevoeg aan de interface kan ik deze niet implementeren door "public <naam klasse die interface implementeert>(File file) { ... }".
De functionaliteit waar ik naar op zoek ben is de volgende:
Een aantal implementaties van de interface moet in het programma gebruikt kunnen worden. De gebruiker kiest zelf welke hij wil gebruiken. Nu wil ik het onderliggende programma zo min mogelijk aanpassen en garanderen dat de constructoren die aangeroepen worden altijd bestaan. Dat lukt me dus niet met een interface en ook NIET met een abstracte constructor in een abstracte klasse die de interface implementeert (zie hieronder).
hoe kan ik toch op een nette manier garanderen dat het onderliggende programma altijd een bestaande constructor aanroept? en wat is de logica achter het niet kunnen vastleggen van constructoren in een interface?
Klinkt misschien vaag, dus ik zal het even toelichten met een voorbeeldje:
Java:
1
2
3
4
5
6
7
8
9
| public interface Picture { public BufferedImage getImage(); public double getDifference(Picture p); public boolean getUsed(); public void setUsed(boolean used); public void scalePicture(int bx, int by); public String toString(); public Picture read(BufferedReader bRead) throws IOException; } |
Constructor vastleggen in de interface kan niet; als ik bijvoorbeeld "public Picture(File file);" toevoeg aan de interface kan ik deze niet implementeren door "public <naam klasse die interface implementeert>(File file) { ... }".
De functionaliteit waar ik naar op zoek ben is de volgende:
Een aantal implementaties van de interface moet in het programma gebruikt kunnen worden. De gebruiker kiest zelf welke hij wil gebruiken. Nu wil ik het onderliggende programma zo min mogelijk aanpassen en garanderen dat de constructoren die aangeroepen worden altijd bestaan. Dat lukt me dus niet met een interface en ook NIET met een abstracte constructor in een abstracte klasse die de interface implementeert (zie hieronder).
Java:
1
2
3
| public abstract class AbstractPicture implements Picture { public abstract AbstractPicture(File file); } |
hoe kan ik toch op een nette manier garanderen dat het onderliggende programma altijd een bestaande constructor aanroept? en wat is de logica achter het niet kunnen vastleggen van constructoren in een interface?