создание экземпляра класса из массива интерфейсов - PullRequest
2 голосов
/ 07 октября 2011

ПОСМОТРЕТЬ РЕДАКТИРОВАТЬ ПОЛОВИНУ ВНИЗ ПОЧТЫ.

Я новичок в 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 () не является абстрактным и не реализует метод one ()».


EDIT:

хорошо, давайте попробуем это ... интерфейс:

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
}

Я не могу думать о гораздо большем, что было бы полезно, кроме упоминания о том, что существуют другие наследующие и расширяющие классы, но они следуют точно так же, как и синтаксис.

Нет ошибок при компиляции фигуры, но «Rectangle не является абстрактным и не переопределяет абстрактный метод calcAread () in Shape» Ошибка, когда я компилирую класс Rectangle.

Надеюсь, это будет более поучительно.

Спасибо

Ответы [ 2 ]

3 голосов
/ 07 октября 2011

единственная проблема, которую я вижу в коде, состоит в том, что вместо этого i <5, если i <6.размер массива равен 5, а для инициализации задано значение i = 0.(итерации цикла должны быть 0,1,2,3,4, в противном случае вы получите исключение ArrayIndexOutOfBound) </p>

Я скомпилировал код и он работает нормально.

1 голос
/ 07 октября 2011

То, что вы предоставили в качестве примера кода, будет работать просто отлично. Я подозреваю, что ваш точный код и пример кода отличаются.

Трудно сказать, не видя точное сообщение об ошибке и класс B, но я готов поспорить, что у вас есть либо возвращаемое значение, либо разница в параметрах между определением one в вашем интерфейсе и вашим one в вашем осуществление.

Редактировать: вот что я вижу в качестве проблемы. Метод вашего интерфейса называется "calcAread". Это d должно быть в конце?

public double calcAread();

Потому что он отсутствует внутри прямоугольника

public double calcArea()

Это вызовет проблемы. Меня удивляет, как @Zohaib удалось скомпилировать его на самом деле!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...