从接口数组中实例化一个类

时间:2011-10-07 04:44:14

标签: java inheritance

看到编辑半途而废。

我是java的新手,所有正式的继承声明让我有些困惑。

我有这样的界面:

public interface A{
    public void one();
    public void two();
}

然后我有两个类似的那样:

public class B implements A{
    private int num;

    public void one(){
        ...
    }
    public void two(){
        ...
    }
    public B(){
        this.num = 1;
    }
}

public class C extends B{
    public C(){
        super();
    }
}

然后我有一个像这样的驱动程序类:

public class Driver{
    public static void main(String [] args){
        A a_array[] = new A[5];

        for(int i=0; i<6; i++){
           if(i%2==0){
               a_array[i] = new B();
           }
           else{
               a_array[i] = new C();
           }
        }
    }
}

基本上,给定一个接口数组,我试图实现实现该接口的各种类。

现在我的猜测是这个实现有几个问题,但我似乎无法嗅出它们。现在主要是我得到错误'B()不是抽象的,并没有实现方法一()'。


编辑:

好吧让我试试吧...... 界面:

public interface Shape{
     public double calcAread();
     public double calcPerimeter();
}

实施班:

public class Rectangle implements Shape{
    private double length;
    private double width;

    public double calcArea(){
         return this.length*this.width;
    }

    public double calcPerimeter(){
         return (this.length*2)+(this.width*2);
} 

    public Rectangle(double length, double width){
        this.length=length;
        this.width=width;
    }
    // then some other methods including the set methods
}

扩展类:

public class Square extends Rectangle{
    public Square(){
        super();
    }

    public Square(double sideLength){
         super.setLength(sideLength);
         super.setWidth(sideLength);
    }
    // some more methods
}

除了提及其他继承和扩展类之外,我不能想到更多有用的东西,但它们遵循完全相同的设计和sentax。

编译形状时没有错误,但是'Rectangle不是抽象的并且不覆盖Shape中的抽象方法calcAread()'错误在编译Rectangle类时被触发。

希望这会更具启发性。

由于

2 个答案:

答案 0 :(得分:3)

我在代码中看到的唯一问题是i&lt; 5而不是i&lt; 6。数组大小为5,初始化设置为i = 0。 (循环迭代应该是0,1,2,3,4,否则你将获得ArrayIndexOutOfBound异常)

我编译了代码并且运行正常。

答案 1 :(得分:1)

您提供的示例代码可以正常运行。我怀疑你的确切代码和示例代码有所不同。

没有看到确切的错误消息和B类很难说,但是我愿意打赌你的界面中one的定义和{{1}之间的返回值或参数差异在你的实现中。

编辑:这就是我所看到的问题。您的界面方法称为“one”。是calcAread应该在最后吗?

d

因为它在Rectangle

中缺失
public double calcAread();

这会导致问题。这让我想知道@Zohaib是如何设法编译的呢!