Java 子对象数组

Java 子对象数组,java,arrays,object,inheritance,Java,Arrays,Object,Inheritance,我创建了一个名为Courrier public class Courrier { private double poid; private boolean expr; String ad; private char z ; public Courrier(double poid, boolean expr, String ad, char z) { this.poid = poid; this.expr = expr; this.ad = ad; this.z =

我创建了一个名为Courrier

public class Courrier {
private double poid;
private boolean expr;
String ad;
private char z ;
public Courrier(double poid, boolean expr, String ad, char z) {
    this.poid = poid;
    this.expr = expr;
    this.ad = ad;
    this.z = z;
}
public double getPoid() {
    return poid;
}
public boolean isExpr() {
    return expr;
}
public String getAd() {
    return ad;
}
public char getZ() {
    return z;
}}
 Courrier[] T = new Courrier[4];
两个子类都包含一个名为
affranchir()的方法
然后有一个类测试

public class Test {
public static void main(String[] args) {
    Courrier[] T = new Courrier[4];
    T[0] = new Lettre(200, true, "London", 'C', "A3");
    T[1] = new Colis(3000, false, "Barcelone", 'B', 50);
    T[2] = new Lettre(500, false, "Béchar", 'A', "A4");
    T[3] = new Colis(150, true, "New york", 'C', 175);
    double tarif=0;
    for (int i = 0; i < T.length; i++) {
            System.out.println(T[i].affranchir());
            tarif+=T[i].affranchir();
    }
    System.out.println(tarif);
}}
 Courrier[] T = new Courrier[4];
公共类测试{
公共静态void main(字符串[]args){
Courrier[]T=新Courrier[4];
T[0]=新Lettre(200,真,“伦敦”,“C”,“A3”);
T[1]=新的Colis(3000,假,“Barcelone”,B',50);
T[2]=新的Lettre(500,false,“Béchar”,“A”,“A4”);
T[3]=新科利斯(150,真,“纽约”,“C',175);
双塔里夫=0;
对于(int i=0;i
它说有个问题 方法
affranchir()
对于类型Courrier
我想让它在不施法的情况下工作,请问有什么办法吗?

您已经制作了一个父类Courrier数组

 Courrier[] T = new Courrier[4];
然后通过该对象调用子类的方法

 Courrier[] T = new Courrier[4];
T[i].affranchir();
这是唯一的错误。而不是使父类的对象成为子类的对象,然后调用该方法。这肯定会奏效的。
谢谢

您制作了一个父类Courrier数组

 Courrier[] T = new Courrier[4];
然后通过该对象调用子类的方法

 Courrier[] T = new Courrier[4];
T[i].affranchir();
这是唯一的错误。而不是使父类的对象成为子类的对象,然后调用该方法。这肯定会奏效的。
谢谢

为courrier添加一个抽象方法

 Courrier[] T = new Courrier[4];
public abstract class Courrier {

/* code */

 public abstract void affranchir();

/* code */

}

向courrier添加抽象方法

 Courrier[] T = new Courrier[4];
public abstract class Courrier {

/* code */

 public abstract void affranchir();

/* code */

}

在基类(以及子类
@Override
it)中实现该方法-否则不(我不认为反射是更好的强制转换解决方案)Java根据引用类型而不是实际类型决定可以访问哪个方法。如果希望能够通过超类引用访问
affranchir()
方法,则该类型需要具有该方法。但也许你真的不需要你的数组成为你的超类?也许您可以创建单独的
接口
,其中包含您想要调用的方法,然后让您的子类实现该接口?通过这种方式,您可以使用
YourInterface[]
数组,而不是
Courrier[]
数组,它可以保存实现该接口的所有实例。在基类中实现该方法(以及子类
@重写它)
否则不可以(我不认为反射是更好的强制转换解决方案)Java根据引用类型而不是实际类型来决定哪些方法是可访问的。如果希望能够通过超类引用访问
affranchir()
方法,则该类型需要具有该方法。但也许你真的不需要你的数组成为你的超类?也许您可以创建单独的
接口
,其中包含您想要调用的方法,然后让您的子类实现该接口?通过这种方式,您可以使用
YourInterface[]
array,而不是
Courrier[]
array,它可以保存实现该接口的所有实例。我知道,但有人告诉我,要创建父类Courrier thnxxi的数组,如果要创建父类的数组,请定义affranchir()方法在父类本身中。我知道,但有人告诉我要创建父类Courrier thnxxi的数组。如果要创建父类数组,请在父类本身中定义affranchir()方法。