2016-02-29 25 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

相关问题