[英]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]){
other
是IPAddress
类型的,因此您不能将其视为数组。
你的意思是
if (this.IpAdress[i]!=other.IpAdress[i]){
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.