CokeLightMedlem sedan juni 2000506 inlägg
Hejsan,
Har en klass CListCases
public class CListCases extends CGraphics implements ActionListener
där CGraphics:
public class CGraphics extends JFrame
{
public void addComponentsToPane()
{}
public void showGui()
{}
public void initLookAndFeel()
{}
}
och nu skulle jag vilja att CListCases även extends DefaultTableColumnModel
men läste att No more multiple inheritance och de rekommenderade att man använde sig av interface.. Men jag hittar inte hur man i detta fall gör rent praktiskt..? (Kanske bättre att ändra på program designen som jag läste nånstans, men om det finns nån kod vore det intressant om så bara för att lära sig lite om hur interface funkar.. om det nu var lösningen alltså :)
CokeLightMedlem sedan juni 2000506 inlägg
har läst lite till.. hmm.. att göra en interface och sedan implementera den verkar skilja sig från att köra extends på en basklass i och med att man bara definierar vilka metoder som måste vara med, men jag måste fortfarande definiera själva metoderna..?
Om jag för enkelhetens skull (bara för att komma vidare med kodningen :) ) skriver
public interface IGraphics
{
public void addComponentsToPane();
public void showGui();
public void initLookAndFeel();
}
o sen borde jag kunna skriva
public class CGraphics extends JFrame implements IGraphics
men jag måste ju fortfarande skriva vad showGui() etc ska göra, och det behöver jag ju inte göra när jag gör extends direkt..?
Jag läste t.ex.
In Java a derived class can have only one base class. However, in addition to any base class a Java class may have, it can also implement any number of interfaces. This allows Java programs to approximate the power of multiple base classes without the complications that can arise with multiple base classes.
Här lät det lite som att interfaces elegant ersatte användandet av extends vilket det iofs gör, men att man alltså måste skriva implementationen själv återigen..? Så det verkar inte passa i mitt fall..? Typ fel verktyg för ändamålet..?
spangoMedlem sedan juni 20006 147 inlägg
Svårt att ge några tips när man vet såhär lite om systemet. Men vill du ha en DefaultTableColumnModel som är tätt knuten till en CListCases får du göra en inre klass som extendar DefaultTableetc:
public class CGraphics extends JFrame
{
public void addComponentsToPane()
{}
public void showGui()
{}
public void initLookAndFeel()
{}
[b]public DefaultTableColumnModel createColumnModel(){
return new Spritfest();
}
private class Spritfest extends DefaultTableColumnModel {
// härifrån kan du använda allt i CGraphics...
Spritfest(){ showGui(); }
}[/b]
}
Att interfaces ersätter klassarv är minst sagt en sanning med modifikation. I vissa fall kan det funka som en ersättare, men inte alltid. Exempelvis skulle din CGraphics kunna implementera alla gränssnitt som DefaultTableColumn... gör, och på så sätt gå att använda i i princip alla situationer där man normalt använder DefaultTableColumn..., men du skulle bli tvungen att skriva all kod själv.
CokeLightMedlem sedan juni 2000506 inlägg
Hej Spango, tack a det verkar jättebra.. har aldrig sett konstruktion med inre klass.. var rädd att jag skulle behöva överge CGraphics ett tag o lägga den direkt i CListCases.. men nu kan jag prova såsom du sagt.. sitter o funderar lite för närvarande.. återkommer säkert.. :)