2016-02-29 41 views
-6

我有一個標籤:Piece set[]如何調用子類方法? (對象標籤)

它包含了玩家一片誰是子類的父類件 的但是當我嘗試訪問子類的方法,它是不工作..

boolean c = set[i].sub_classes_method(1, 3); 

錯誤:方法sub_classes_method(INT,INT)是未定義的類型件

  • 我不能用靜態方法()
  • 這是唯一的問題我已經就我去(幾乎完成)
  • 我沒有問題的代碼,我只是不知道如何做到這一點

感謝您的回答。 !

(從片的子類之一)

public boolean coupValide(int y_a, int x_a) { // tmp fct() 

if (caseVide(x_a, y_a) == true) { // TODO: Faire les prises, travail sur 
        // le reste pour l'instant 
    if (getCouleur() == 'n') { 
    if (getX() == x_a && getY() == y_a - 2) // test: avancé 2 cases 
    { 
     return true; 
    } else if (getX() == x_a && getY() == y_a - 1) { 
     return true; 
    } 
    } 
    else if (getCouleur() == 'b') 
    { 
    if (getX() == x_a && getY() == y_a + 2) // test: avancé 2 cases 
    { 
     return true; 
    } else if (getX() == x_a && getY() == y_a + 1) { 
     return true; 
    } 
    } 
} 
return false; 

其中i定義和使用該對象標籤[]:

public class Joueur extends Jeu { 

private final int NEL = 16; // Nombre de piece du joueur 
private Piece set[]; 
private int noJoueur; 

public Joueur(int noJoueur) { // n = numero du joueur (1, 2); 
set = new Piece[NEL]; 
this.noJoueur = noJoueur; 
char tmp; 

for (int i = 0; i < NEL; i++) { 

    if (noJoueur == 1) 
    tmp = 'b'; 

    else 
    tmp = 'n'; 

    if (i == 0 || i == 7) 
    set[i] = new Tour(tmp); 

    else if (i == 1 || i == 6) 
    set[i] = new Cavalier(tmp); 

    else if (i == 2 || i == 5) 
    set[i] = new Fou(tmp); 

    else if (i == 3) 
    set[i] = new Dame(tmp); 

    else if (i == 4) 
    set[i] = new Roi(tmp); 

    else if (i > 7) 
    set[i] = new Pion(tmp); 
} 
}... 
  • 如何調用此方法與我的片標籤[] ?? 編輯:我需要使類Piece抽象,但如何使布爾抽象的方法?

解決:對於每個子類的行爲,抽象超類做得非常好!

+0

告訴我們,你在遇到問題的代碼片段。 –

回答

-1

你只能使用超類方法,當你做一個數組。因此可以使用任何超類。嘗試製作,可以爲每個子類

+0

你能告訴我如何做一個**布爾**子類方法的抽象方法? – QyyBAAASSH

0

定義不同的抽象方法正如你可以看到coupValide方法有兩個整型參數,所以 它需要被稱爲

tab[i].coupValide(x, y); 

我不知道(在你的情況下)的xy值會是什麼

+0

我這樣做,只是不好的編輯,但問題是當我打電話「標籤[我]」 – QyyBAAASSH

+0

請告訴我們'tab'數組被定義和使用的位置。 –

+0

再次編輯;)ps:我的數組應該是超類的類型,不是? – QyyBAAASSH

0
public abstract class Foo 
{ 
    public abstract boolean boo(); 
} 

不同的.java文件

public class GoodFoo extends Foo 
{ 
     @override 
     public boolean boo() 
     { 
      //code 
      return b; 
     } 
} 

不同的文件

public class Main 
{ 
    public static void main(String[] args) 
    { 
      ArrayList<Foo> a = new ArrayList<Foo>(); 
      a.add(new GoodFoo); 
      boolean b = a.get(0).boo(); 
    } 
} 
+0

任何擴展Foo的類可以添加到數組中,並且可以在Foo中調用任何抽象方法。 – ZergRushJoe