2010-01-13 18 views
21

hei. językiem jest java. Chcę rozszerzyć tę klasę, której konstruktor ma parametry.java, rozszerzenie klasy z konstruktorem klasy głównej ma parametr

to główne klasy

public class CAnimatedSprite { 
    public CAnimatedSprite(String pFn, int pWidth, int pHeight) { 
    } 
} 

to dziecko klasa

public class CMainCharacter extends CAnimatedSprite { 

    //public void CMainCharacter:CAnimatedSprite(String pFn, int pWidth, int pHeight) { 
    //} 
} 

Jak napisać poprawną składnię? a błąd to "konstruktor nie może być zastosowany do podanych typów"

Odpowiedz

36

Możesz zdefiniować dowolne argumenty potrzebne dla swojego konstruktora, ale konieczne jest wywołanie jednego konstruktora super klasy jako pierwszego wiersza własnego konstruktora. Można to zrobić za pomocą super() lub super(arguments).

public class CMainCharacter extends CAnimatedSprite { 

    public CMainCharacter() { 
     super("your pFn value here", 0, 0); 
     //do whatever you want to do in your constructor here 
    } 

    public CMainCharacter(String pFn, int pWidth, int pHeight) { 
     super(pFn, pWidth, pHeight); 
     //do whatever you want to do in your constructor here 
    } 

} 
+0

to działa. dzięki. już z tym problemem składni. – r4ccoon

+0

co jeśli mam wiele konstruktorów w mojej klasie głównej? Czy muszę zrobić super() dla każdego z nich w mojej klasie rozszerzenia? – sammiwei

3

Pierwsza instrukcja konstruktora musi być wołaniem do konstruktora nadklasy. Składnia jest następująca:

super(pFn, pWidth, pHeight); 

To do ciebie, aby zdecydować, czy chcesz konstruktor klasy mają takie same parametry i po prostu przekazać je do konstruktor nadklasy:

public CMainCharacter(String pFn, int pWidth, int pHeight) { 
    super(pFn, pWidth, pHeight); 
} 

lub przekazać coś innego, jak:

public CMainCharacter() { 
    super("", 7, 11); 
} 

I nie określają typ zwracany dla konstruktorów. To nielegalne.

1
public class CAnimatedSprite { 
    public CAnimatedSprite(String pFn, int pWidth, int pHeight) { 
    } 
} 


public class CMainCharacter extends CAnimatedSprite { 

    // If you want your second constructor to have the same args 
    public CMainCharacter(String pFn, int pWidth, int pHeight) { 
     super(pFn, pWidth, pHeight); 
    } 
} 
Powiązane problemy