еще один вопрос об интерфейсах, классах и конструкторах в Java - PullRequest
0 голосов
/ 08 апреля 2011

Еще один вопрос, относящийся к этому интерфейсу .

Допустим, я хотел бы реализовать интерфейс теперь с массивами.

Вот часть моего кода:

import java.util.Arrays;

class IPAddressShortArray implements IPAddress {

private int [] IpAdress;

public  IPAddressShortArray(int num1, int num2, int num3, int num4) {
    this.IpAdress[0] =num1 ;
    this.IpAdress[1]=num2;
    this.IpAdress[2]=num3;
    this.IpAdress[3]=num4;

}

public String toString() {
    return IpAdress.toString();

}

public boolean equals(IPAddress other) {

    boolean T= true;
    for (int i=0;i<=3;i++){
        if (this.IpAdress[i]!=other[i]){
            .......

        }
    }
}

Ошибка компилятора говорит, что The type of the expression must be an array type but it resolved to IPAddress, но IpAddress сейчас представлен массивом, так в чем же проблема?почему я не могу сослаться на other[i], если у меня есть эта реализация?

Я знаю, что равенства не должны быть реализованы снова.Давайте предположим, что я хочу это реализовать.

Ответы [ 4 ]

1 голос
/ 08 апреля 2011

Весь смысл интерфейсов в том, что они скрывают детали реализации. Вы используете переменную, объявленную как тип IPAddress, но затем пытаетесь использовать ее как IPAddressShortArray.

Надлежащей реализацией будет добавление метода к интерфейсу для получения каждого октета адреса, например ::100100

public int getOctet(int octetIndex)

В классе IPAddressShortArray реализация этого метода будет выглядеть следующим образом:

public int getOctet(int octetindex) {
  return this.IpAddress[octetindex];
}

Тогда в вашем методе equals вы бы использовали other.getOctet(i) вместо other[i] или other.IpAddress[i].

0 голосов
/ 08 апреля 2011

Другой тип IPAddress, который не является массивом. Мне было бы проще использовать код, если бы IpAddress начинался с символа нижнего регистра, так как это очень распространенное соглашение для переменных Java, классы обычно начинаются с заглавной буквы.

0 голосов
/ 08 апреля 2011
 if (this.IpAdress[i]!=other[i]){

other относится к типу IPAddress, поэтому вы не можете рассматривать его как массив.

Вы имели в виду

 if (this.IpAdress[i]!=other.IpAdress[i]){

?

0 голосов
/ 08 апреля 2011

other по-прежнему является IP-адресом, а не массивом. Кроме того, вы никогда не инициализируете участника IpAdress (вам нужно new int[4]), и вы написали его неправильно.

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