Avatar billede nielsenmathias Nybegynder
22. november 2007 - 12:02 Der er 2 kommentarer og
1 løsning

Java interfaces - hvorfor kun public metoder?

Hejsa, et spørgsmål vedrørende java-interfaces.

Jeg arbejder med en større java application, hvor jeg har delt de forskellige dele op i packages.

mit application-layer bruger bl.a. objekterne i mit modellayer.

i modellayer har jeg defineret et interface der beskriver hvilke metoder objekterne i den package skal tilbyde udaftil...de skal naturligvis være public.
i modellayer vil jeg også gerne definere et interface som beskriver hvilke metoder objekterne skal tilbyde internt i pakken, altså metoder der ikke kan tilgås udefra! det er straks sværere da man ikke kan lade være med at angive access modifier (som er package visibility) på de metoder der er  defineret i dette interface! dvs.man kan godt compilere interfacet med metoder uden access modifier, men ikke de objekter der implementerer interfacet.

dvs nedenstående give fejl.

interface I_packageInternal
{
  void doSomething();
}

public class someObject implements I_packageInternal, etc
{
  void doSomething()
  {
  }
}

Java-teorien siger også at det ikke kan lade sig gøre, så mit spørgsmål er simpelthen....hvorfor (?!) og er der en løsning? for det ville være meget nyttigt i mit tilfælde!

Mvh Mathias
Avatar billede nielsenmathias Nybegynder
22. november 2007 - 13:23 #1
alle de objekter i modellayer som problemet vedrører arver fra en base-class. har løst det ved at definere de metoder som abstract og se bort fra interfaces.
Avatar billede jakoba Nybegynder
23. november 2007 - 02:08 #2
Du bør specificere de samme access rettigheder både i interface og klasse

eg:

interface I_packageInternal
{
  private void doSomething();
}

public class someObject implements I_packageInternal, etc
{
  private void doSomething()
  {
  }
}
Avatar billede nielsenmathias Nybegynder
27. november 2007 - 09:56 #3
hej jakoba.

Man kan ikke definere metoder private i et interface...kun public og abstract - udvikler under eclipse og det siger den i hvert fald til mig (jdk1.5.0_5).
Man kan som sagt også lade være med at skrive en access mod, hvorved den så skulle blive default access (dvs. package visibility)... det virker dog ikke, da man så får fejl når man vil implementere metoden med default visibility.

Har som sagt løst det ved at droppe det interface og gøre metoderne abstract i base-objektet i stedet for
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