Avatar billede delley Nybegynder
21. februar 2005 - 16:54 Der er 11 kommentarer

Kald til "overriden" child metode fra parent klasse metoden

Hej,

Jeg har noget kode hvor jeg gerne vil have en parent klasses metode til at kalde alle under klassers metode

eks:

Public class parent{

  public void shutdown(){
    // her kaldes alle underklasser der har overridet methoden "shutdown"
  }
}// end class


Public class child extends parent{

  public void shutdown(){
    // ryd op efter dig!!!
  }

}// end class


Det jeg gerne vil ha' er når der bliver kaldt shutdown på parent, så bliver methoden shutdown også kaldt på alle children.

Nogle ideer?

delley
Avatar billede kalp Novice
21. februar 2005 - 16:58 #1
Kan godt være jeg bare sover lidt... men ville jo normalt være fra child til parent... og så kalder man igennen super. men hvis du virkelig mener at det skal være fra parent til child så TROR jeg at du i dine klasse parent skal have en reference til child klassen og det samme med childklassen (for den er jo egentlig også parent) til sin osv.

Men kan være der er andre med andre bud:)
Avatar billede jakoba Nybegynder
21. februar 2005 - 17:00 #2
lav din underklassers implementation af shutdown om til

public void shutdovn() {
    super.shutdown();  // ryd først op i superklassen
    // og udfør derefter oprydning specifik for denne klasse
}

mvh JakobA
Avatar billede arne_v Ekspert
21. februar 2005 - 17:01 #3
parent o = new child();
o.shutdown();

vil kalde child's shutdown fordi alle metoder er virtual i Java

(og hvis parent's shutdown skal kaldes, så skal child's shutdown kalde super.shutdown())
Avatar billede delley Nybegynder
21. februar 2005 - 17:06 #4
Kender godt super.shutdown(), men det er desværre den forkerte vej...

ok - så den eneste måde jeg kan komme uden om det på er at selv instanciere child klassen fra parent klassen...?

delley
Avatar billede delley Nybegynder
21. februar 2005 - 17:08 #5
Er det ikke mulgit at i JVM'et at lokalisere alle "live" objecter af en bestemt type?
Avatar billede arne_v Ekspert
21. februar 2005 - 17:11 #6
Den normale konstruktion i OOP er:

parent o = new child();

Selvom man instantierer af en child klasse, så er der kun et objekt.
Avatar billede arne_v Ekspert
21. februar 2005 - 17:13 #7
Der er ikke noget i standard Java API til det.

Men måske i et monitorerings/debugging interface til JVM'en.
Avatar billede jakoba Nybegynder
21. februar 2005 - 18:47 #8
>>  "men det er desværre den forkerte vej..."

Kan du prøve at forklare hvorfor det er den forkerte vej? (jeg tror ikke rigtig på det.
Avatar billede arne_v Ekspert
21. februar 2005 - 19:12 #9
Måske er det den her konstrukion som efterlyses:

public class Ugly {
    public static void main(String[] args) {
        UglyP o = new UglyC();
        o.m1();
    }
}

class UglyP {
    public void m1() {
        ((UglyC)this).m2();
    }
}

class UglyC extends UglyP {
    public void m2() {
        System.out.println("Du skulle skamme dig over den her kode");
    }
}
Avatar billede kalp Novice
21. februar 2005 - 19:15 #10
;o)
Avatar billede jakoba Nybegynder
22. februar 2005 - 00:57 #11
Der er nu noget her der ikke stemmer.

eksempel 1:
  class Parent{ ... }

  class Boy extends Parent{ ... }
  class Girl extends Parent{ ... }
  class HipHopper extends Parent{ ... }
  // osv.
   
Boy, Girl, HipHopper, osv er underklasser til klassen Parent.

eksempel 2
  class Parent{ ... }
  class Child extends Parent{ ... }

  Child peter = new Child();
  Child marie = new Child();
  Child mrFatman = new Child();
  // osv.

peter, marie, mrFatman osv. er alle instanser af samme klasse ('Child') som er en underklasse til klassen Parent.


Så når du siger
    // her kaldes alle underklasser der har overridet methoden "shutdown"
er det så eksempel l et eller eksempel 2 du har i tankerne.

Strengt set er kun 'forskellige klasse definitioner der extender klassen Parent' der er underklasser til klassen Parent (eksempel 1); men udfra dit spørgsmål ser det ud somom du mener 'alle objekt-instanser af klasse definitioner der extender klassen Parent' (eksempel 2)
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