Java中的接口,类和构造函数

关于接口和类,这让我感到困扰。

我正在尝试通过名为IPAddressString的类对名为IPAddress的接口进行实施。Ipadress包含四个部分。

我正在编写一个名为mask的方法,该方法用给定的地址屏蔽当前地址。掩码操作是对地址的所有四个部分进行按位“与”操作。您可以通过我编写的名为getOc​​tet的方法来获得所有四个部分。(您可以在下面看到)。

好的,所以我需要掩盖我的this.IpAdress,并用新的通用IPAddress编写类。

在写口罩时,我遇到了问题。我计算了4个要返回新IPAddress类型的整数。为了做到这一点,我需要使用返回IPAddressString类型的构造函数,并且很明显,我无法从IPAddressString转换为IPAddress。

我迷路了。我该怎么办?为什么我的构造对这个没有好处?IPAddressString是否不是IPAddress的子类型?

这是使它更简单的代码:

这是界面:

public interface IPAddress {

/**

* Returns a string representation of the IP address, e.g. "192.168.0.1"

*/

public String toString();

/**

* Compares this IPAddress to the specified object

*

* @param other

* the IPAddress to compare this string against

* @return <code>true</code> if both IPAddress objects represent the same IP

* address, <code>false</code> otherwise.

*/

public boolean equals(IPAddress other);

/**

* Returns one of the four parts of the IP address. The parts are indexed

* from left to right. For example, in the IP address 192.168.0.1 part 0 is

* 192, part 1 is 168, part 2 is 0 and part 3 is 1.

*

* @param index

* The index of the IP address part (0, 1, 2 or 3)

* @return The value of the specified part.

*/

public int getOctet(int index);

/**

* Returns whether this address is a private network address. There are

* three ranges of addresses reserved for 'private networks' 10.0.0.0 -

* 10.255.255.255, 172.16.0.0 - 172.31.255.255 and 192.168.0.0 -

* 192.168.255.255

*

* @return <code>true</code> if this address is in one of the private

* network address ranges, <code>false</code> otherwise.

* @see <a href="http://en.wikipedia.org/wiki/IPv4#Private_networks">Private Networks</a>

*/

public boolean isPrivateNetwork();

/**

* Mask the current address with the given one. The masking operation is a

* bitwise 'and' operation on all four parts of the address.

*

* @param mask

* the IP address with which to mask

* @return A new IP address representing the result of the mask operation.

* The current address is not modified.

*/

public IPAddress mask(IPAddress mask);

}

这是我的课:

public class IPAddressString {

private String IpAdress;

public IPAddressString(int num1, int num2, int num3, int num4) {

this.IpAdress = num1 + "." + num2 + "." + num3 + "." + num4;

}

public String toString() {

return this.IpAdress;

}

public boolean equals(IPAddress other) {

return ((other.toString()).equals(IpAdress));

}

public int getOctet(int index) {

StringBuffer buf = new StringBuffer();

int point = index;

int countPoints = 0;

for (int i = 0; i <= IpAdress.length() - 1; i++) {

if ((IpAdress.charAt(i)) == '.') {

countPoints++;

}

if ((countPoints == point) && IpAdress.charAt(i) != '.') {

buf.append(IpAdress.charAt(i));

}

}

String result = buf.toString();

return Integer.parseInt(result);

}

public boolean isPrivateNetwork() {

if (getOctet(0) == 10) {

return true;

}

if (getOctet(0) == 172) {

if (getOctet(1) >= 16 && getOctet(1) <= 31) {

return true;

}

}

if (getOctet(0) == 192) {

if (getOctet(1) == 168) {

return true;

}

}

return false;

}

public IPAddress mask(IPAddress mask){

int n0= mask.getOctet(0) & getOctet(0);

int n1= mask.getOctet(1) & getOctet(1);

int n2=mask.getOctet(2) & getOctet(2);

int n3=mask.getOctet(3) & getOctet(3);

IPAddress n1= new IPAddressString (n0,n1,n2,n3);

}

}

问题再次出在方法掩码上。我需要返回一个新的IPAddress,但是我应该使用我的结构。我想念什么?

谢谢。

回答:

您可以IPAddress在中实施IPAddressString。尽管您正在实现类中的所有IPAddress接口方法IPAddressString,但您并未将此告知编译器[显然,编译器无法猜测您的意图]。

将类的定义更改为:

class IPAddressString implements IPAddress

这应该解决转换中的问题。

现在这行:

IPAddress n1= new IPAddressString (n0,n1,n2,n3);

建立层次结构不会给您带来问题。您可以和平归来n1

以上是 Java中的接口,类和构造函数 的全部内容, 来源链接: utcz.com/qa/402830.html

回到顶部