[JAVA] inheritance van niet bestaande methode

Pagina: 1
Acties:

  • leander
  • Registratie: Oktober 1999
  • Laatst online: 02-03-2025
Ik heb als voorbeeld de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Mother extends Object {
    void start() {
        System.out.println("gestart");
    }
}
class Child extends Mother {
    void test() {
        super.start();
    }
}
public class Test {
    public static void main(String[] args) {
        Child child = new Child();
        child.test();
    }
}

Dit werkt prima.
Als ik de code verander in
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Mother extends Object {
    void startNiet() { //naam veranderd
        System.out.println("gestart");
    }
}
class Child extends Mother {
    void test() {
        super.start();
    }
}
public class Test {
    public static void main(String[] args) {
        Child child = new Child();
        child.test();
    }
}

compiled de code niet eens. En terecht!

Nu ben ik de code van een programma aan het doorspitten voor m'n stage en daar vind ik de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class FileSequenceInput extends AbstractSequenceInput
{
  private JFileChooser chooser = new JFileChooser();
  private String defaultParser;
  
  public FileSequenceInput() 
  {
    super.setExceptionHandler(new FileSequenceParserExceptionHandler());
  }

  public void start()
  {
    super.start();
    
    // fetch the default parser from the config information. 
    defaultParser = getConfigProperties().getProperty( "default" );
    defaultParser = defaultParser.substring( 4, defaultParser.length() );
  }

Nu bevat de class AbstractSequenceInput (de superclass van FileSequenceInput) geen methode "start()" en toch compiled deze code wel :?

Hoe kan dat nou?
Ik zie duidelijk iets over het hoofd, ideeen zijn meer dan welkom...

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

is AbstractSequenceInput een sub-class van Thread of implementeerd die de Runnable interface :?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

misschien (hoogst waarschijnlijk) heeft de parent(of andere voorouder) van AbstractSequenceInput wel een start methode, en dan wordt die gewoon overgeerfd.

[edit]iedereen denkt te moeilijk :P hij wil alleen weten waarom het compileerd.

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-09 23:31

Macros

I'm watching...

De methode start() is meestal van een Runnable object.
Ik denk dat je de start methode en de constructor doorelkaar haalt.
Start() gebruik jij als zomaar een methode. En in dat programma wordt het waarschijnlijk gebruikt om ene nieuwe thread te starten omdat hij runnable is.

"Beauty is the ultimate defence against complexity." David Gelernter


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op woensdag 10 oktober 2001 13:24 schreef Alarmnummer het volgende:
misschien (hoogst waarschijnlijk) heeft de parent(of andere voorouder) van AbstractSequenceInput wel een start methode, en dan wordt die gewoon overgeerfd.

[edit]iedereen denkt te moeilijk :P hij wil alleen weten waarom het compileerd.
en dat is precies waarom ik afvraag of die ander misschen van thread extend of runnable implementeerd

  • leander
  • Registratie: Oktober 1999
  • Laatst online: 02-03-2025
Jullie denken niet te moeilijk...dit zijn precies de dingen die ik wil weten :)

Ik ben nog ff aan het zoeken...

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Als een klasse runnable implementeerd heeft hij nog geen methode start().

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • leander
  • Registratie: Oktober 1999
  • Laatst online: 02-03-2025
Hij implementeert CinemaActionProvider:
code:
1
2
public abstract class AbstractSequenceInput extends CinemaGuiModule 
  implements CinemaActionProvider

En dat is een interface:
code:
1
2
3
4
5
6
7
package uk.ac.man.bioinf.apps.cinema.core;
import javax.swing.Action;

public interface CinemaActionProvider 
{
  public Action[] getActions();
}// CinemaActionProvider

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Dat is inderaad heel vreemd. Ik zou niet weten waarom de code compileerd. Misschien heb je een ms java compiler :+

  • frice
  • Registratie: Januari 2001
  • Laatst online: 17-07 07:41
Het ligt voor de hand dat een van de superclasses de start() methode bevat (in jouw geval misschien in de Module class?).

Kwestie van class opzoeken, start() methode zoeken, als niet gevonden naar superclass, etc.

Kijk anders in de docs, dan heb je 't zo gevonden.

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op woensdag 10 oktober 2001 14:34 schreef rwb het volgende:
Als een klasse runnable implementeerd heeft hij nog geen methode start().
Klopt, je hebt gelijk..

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-


  • leander
  • Registratie: Oktober 1999
  • Laatst online: 02-03-2025
Okee dan, nu kan ik weer slapen :)

Thanks!

[edit]
dat bedoel ik niet lullig...sorry.
Feit is dat ik nog maar net begonnen ben met JAVA.
In feite begrijp ik het nu nog steeds niet helemaal:

Die methode start() in Module.java ziet er als volgt uit:
code:
1
2
3
public void start()
  {
  }

Wat is dan het nut van het aanroepen van deze methode vanuit bijv. FileSequenceInput (zie eerste post)?
Of liever gezegd, wat gebeurt er dan?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

edit]
dat bedoel ik niet lullig...sorry.
Feit is dat ik nog maar net begonnen ben met JAVA.
In feite begrijp ik het nu nog steeds niet helemaal:
Ok het is je vergeven. Maar het is belangrijk dat je de javadoc goed leert beheersen.

  • leander
  • Registratie: Oktober 1999
  • Laatst online: 02-03-2025
Ik besef ook zeker wel de waarde van (java-)docs!
Ik was nu ook in de war gebracht door dit stukje uit language specification:
15.12.4.9 Example: Method Invocation using super
An overridden instance method of a superclass may be accessed by using the keyword super to access the members of the immediate superclass, bypassing any overriding declaration in the class that contains the method invocation.
Echter, als de methode niet is ge-override, kun je 'm dus wel met super.methode() blijven aanroepen.

  • JapJap
  • Registratie: Maart 2001
  • Laatst online: 07-01 11:02
Op woensdag 10 oktober 2001 14:36 schreef Leander het volgende:
Hij implementeert CinemaActionProvider:
code:
1
2
public abstract class AbstractSequenceInput extends CinemaGuiModule 
  implements CinemaActionProvider

En dat is een interface:
code:
1
2
3
4
5
6
7
package uk.ac.man.bioinf.apps.cinema.core;
import javax.swing.Action;

public interface CinemaActionProvider 
{
  public Action[] getActions();
}// CinemaActionProvider
En hij extends CinemaGuiModule... Als de interface een start() had zou die nog wel geimplementeerd moeten worden in AbstractSequenceInput.
Pagina: 1