使用超类java中的方法显示arrayList中的元素

时间:2015-11-30 21:14:56

标签: java eclipse inheritance

我正在尝试在main方法中打印List中的元素。但是我有一个问题,因为Eclipse说我在超类中实现的方法没有为我的类型定义。 有超类,还有其他三个扩展这个,我导入了java.util.List和java.util.ArrayList; 我需要实现方法的原因是因为我的导师问过,但是我知道在主方法中使用for循环就足够了。 超类:

import java.util.ArrayList;
import java.util.List;

public class Figura {

    private  int x;
    private  int y;
    private  String name;
    private int index;


    public Figura (String name, int x, int y) {
        this.name = name;
        this.x = x;
        this.y = y;
    }


    public  int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

public void show(Figura p) {
System.out.println(p.toString());
}
 public void showElements (List <Figura> m) { 
    Figura p =  m.get(index);
    for (int i = 0; i < m.size(); i++){
        System.out.println(m.get(i));
    }
}
}

我不会在这里展示我创建的所有其他类(类是简单的数字,它们扩展了所有超类)。但主要问题在于:

import java.util.ArrayList;
import java.util.List;
public class zadanie2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
List <Figura> kolekcje = new ArrayList<Figura>(10);

Punkt pr1 = new Punkt("Prostokat", 10,148,"Ciemne");
kolekcje.add(0,new Prostokat(pr1,42)); 
Punkt kolo1 = new Punkt("Kolo", 41,23,"Malinowe");
kolekcje.add(1,new Kolo(kolo1, 126));
Punkt pu31 = new Punkt("Punkt 3D", 45, 23,"Pomaranczowe");
kolekcje.add(2, new punkt3D(pu31, 451));
Punkt kw1 = new Punkt("Kwadrat", 215, 521,"Szary");
kolekcje.add(3, new Kwadrat(kw1, 620));
Punkt wk1 = new Punkt("Wektor", 52, 13,"Brazowy");
kolekcje.add(4, new Wektor(wk1, 41,52));
Punkt ec1 = new Punkt("Eklipsa", 52, 301, "Kremowy");
kolekcje.add(5, new Eclipsa(ec1, 22));
Punkt pr2 = new Punkt("Prostokat", 63,40,"Bialy");
kolekcje.add(6, new Prostokat(pr2,310));
Punkt kolo2 = new Punkt("Kolko",52,314,"Rozowe");
kolekcje.add(7, new Kolo(kolo2, 52));
Punkt pu32 = new Punkt("Punkcik 3D", 52,63,"Ciemno-brazowe");
kolekcje.add(8, new punkt3D(pu32, 412));
Punkt kw2 = new Punkt("Kwadracik", 52, 631,"Oliwkowy");
kolekcje.add(9, new Kwadrat(kw2,541));
Punkt wk2 = new Punkt("Wektor", 12, 71, "Czarne");
kolekcje.add(10, new Wektor(wk2, 41, 23));

int size = kolekcje.size();

//for (int i = 0; i< kolekcje.size(); i++) {
//  System.out.println(kolekcje.get(i));
//}
 kolekcje.showElements(kolekcje);
    }

评论的内容(for循环),工作正常,但showElements(List <Figura> m)方法不起作用,Eclipse显示此方法未定义为List<Figura>类型。
此外,它建议像这样投射方法

((Figura) kolekcje).showElements(kolekcje);

但它也不起作用并在线程“main”中显示错误异常java.lang.ClassCastException:java.util.ArrayList无法强制转换为zadownedomoweZadanie1.Figura
请帮忙!

3 个答案:

答案 0 :(得分:1)

kolekcje是对ArrayList的引用。方法showElementsFigura对象上的方法。

您正在尝试访问showElements上的ArrayList,该Figura不可用。

您可以在kolekcje[0].showElements(kolekcje); 个实例上访问它,例如:

Figura.showElements(kolekcje);

此外,根据showElements正在做的事情,您可能需要考虑将其设置为静态并访问它:

``Unicode Error exception 'Illuminate\Database\QueryException' with
message 'SQLSTATE[HY000]: General error: 1267 Illegal mix of
collations (latin1_swedish_ci,IMPLICIT) and
(utf8_unicode_ci,COERCIBLE) for operation '=' (SQL: select `id` from
`pool` where `first_name` in (Nathalia) and `last_name` = Rodr``

答案 1 :(得分:1)

为了能够调用showElements方法,您需要在Figura对象上调用它。所以

kolekcje.showElements(kolekcje);

无效,因为 kolekcje List,而不是Figura

由于您要显示Figura s的列表,&amp;不只是一个;您最好使showElements方法静态。你可以这样称呼它:

Figura.showElements(arrayOfFiguras);

<强> Figura.showElements()

// Display all the items of a Figura List
public static void showElements (List <Figura> m) { 
    for (int i = 0; i < m.size(); i++){
        System.out.println(m.get(i));
    }
}

答案 2 :(得分:0)

您正在调用ArrayList上的showElements()方法,而不是Figura对象。这个问题有两个解决方案,我认为更好的方法是使方法保持静态。如下:

public static void showElements (List <Figura> m) { 
Figura p =  m.get(index);
for (int i = 0; i < m.size(); i++){
    System.out.println(m.get(i));
}

最后,从:

更改方法调用
kolekcje.showElements(kolekcje);

为:

Figura.showElements(kolekcje);

使方法静态非常重要,因为showElements()方法与您调用它的Figura对象的实例完全无关。但是,它完全取决于您传递的列表。

您可以阅读有关使用静态方法here的原因的更多信息。