繁体   English   中英

关于Java中的接口,类和构造函数的另一个问题

[英]one more question about Interfaces, classes and constructors in java

该接口有关的另一个问题。

假设我现在想用数组实现接口。

这是我的代码的一部分:

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]

我知道不应该再次实施平等。 假设我要实现它。

接口的全部要点是它们隐藏了实现细节。 您正在使用一个声明为IPAddress类型的变量,然后尝试将其用作IPAddressShortArray

适当的实现是向接口添加一个方法来获取地址的每个八位字节,例如:

public int getOctet(int octetIndex)

IPAddressShortArray类中,此方法的实现如下所示:

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

然后,在equals方法中,将使用other.getOctet(i)代替other[i]other.IpAddress[i]

other仍然是IPAddress,而不是数组。 另外,您永远不会初始化IpAdress成员(需要new int[4] ),并且将其拼写错误。

其他是不是数组的IPAddress类型。 如果IpAddress以小写字符开头,我会发现代码更易于使用,因为这是Java变量的非常常见的约定,类通常以大写字母开头。

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

otherIPAddress类型的,因此您不能将其视为数组。

你的意思是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM