还有一个与this interface有关的问题。
假设我想现在用数组实现接口。
以下是我的代码的一部分:
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]
?
我知道不应该再实施等于。我们假设我想实现它。
答案 0 :(得分:1)
接口的全部意义在于它们隐藏了实现细节。您正在使用一个声明为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]
。
答案 1 :(得分:0)
other
仍然是IPAddress,而不是数组。此外,您永远不会初始化IpAdress成员(您需要new int[4]
),并且拼错了。
答案 2 :(得分:0)
其他是类型IPAddress
,它不是数组。如果IpAddress
以小写字符开头,我会发现代码更容易使用,因为这是Java变量的一个非常常见的约定,类通常以大写字母开头。
答案 3 :(得分:0)
if (this.IpAdress[i]!=other[i]){
other
的类型为IPAddress
,因此您无法将其视为数组。
你的意思是
if (this.IpAdress[i]!=other.IpAdress[i]){