0

我正在尝试扩展二进制数类,但是当我这样做时,我无法访问某些基类函数,例如我试图在 main 中运行的最后一个函数

import java.util.*;

class BinaryNumber
{
    private boolean b[];

    public void setBit(int index, boolean value)
    {
        b[index] = value;
    }

    public boolean getBit(int index)
    {
        return b[index];
    }

    public void clear()
    {
        for (int i = 0; i < 8; i++)
            b[i] = false;
    }

    public BinaryNumber()
    {
        b = new boolean[8];
        for (int i = 0; i < 8; i++)
        {
            b[i] = false;
        }
    }

    public void inputNumber(int a)
    {

        if (a > 11111111)
        {
            System.out.println(" Exception Number to Large Nothing Entered ");
        }
        else
        {

            int number = a;
            int c = 7;
            int digit = 0;

            for (int i = 0; i < 8; i++)
            {
                digit = number % 10;
                if (digit == 1)
                {
                    b[c] = true;
                }
                else if (digit == 0)
                {
                    b[c] = false;
                }
                else
                {
                    System.out.println(" Only Binary Number Accepted ");
                    clear();
                    i = 8; // break
                }
                number = number / 10;
                c--;
            }
        }
    }

    public void outputNumber()
    {
        for (int i = 0; i < 8; i++)
        {
            if (b[i] == true)
            {
                System.out.print("1");
            }
            else
            {
                System.out.print("0");
            }
        }
        System.out.println("");
    }

    public BinaryNumber ANDNumbers(BinaryNumber second)
    {
        BinaryNumber result = new BinaryNumber();
        boolean temp = false;
        for (int i = 0; i < 8; i++)
        {
            result.setBit(i, (b[i] && second.b[i]));
        }
        return result;
    }
}

类 ExtendedBinaryNumber

class ExtendedBinaryNumber extends BinaryNumber
{
    public ExtendedBinaryNumber binaryAdd(ExtendedBinaryNumber A)
    {
        ExtendedBinaryNumber result = new ExtendedBinaryNumber();
        boolean carry = false;

        for (int i = 7; i >= 0; i--)
        {
            if (getBit(i) == true)
            {
                if (A.getBit(i) == false)
                {
                    if (carry == false)
                    {
                        carry = false;
                        result.setBit(i, true);
                    }
                    else
                    {
                        carry = true;
                        result.setBit(i, false);
                    }
                }
                else
                {
                    if (carry == false)
                    {
                        carry = true;
                        result.setBit(i, false);
                    }
                    else
                    {
                        carry = true;
                        result.setBit(i, true);
                    }
                }
            }
            else
            {
                if (A.getBit(i) == false)
                {
                    if (carry == false)
                    {
                        carry = false;
                        result.setBit(i, false);
                    }
                    else
                    {
                        carry = true;
                        result.setBit(i, true);
                        carry = false;
                    }
                }
                else
                {
                    if (carry == false)
                    {
                        carry = false;
                        result.setBit(i, true);
                    }
                    else
                    {
                        carry = true;
                        result.setBit(i, false);
                    }
                }

            }
        }
        return result;
    }
}

Q6级

class Q6
{
    public static void main(String args[])
    {

        ExtendedBinaryNumber numA = new ExtendedBinaryNumber();
        int a = Integer.parseInt("10010111");
        numA.inputNumber(a);
        numA.outputNumber();

        ExtendedBinaryNumber numB = new ExtendedBinaryNumber();
        int b = Integer.parseInt("10010101");
        numB.inputNumber(b);
        numB.outputNumber();

        System.out.println("");

        // BinaryNumber c=numA.ANDNumbers(numB);
        // c.outputNumber();

        // ExtendedBinaryNumber dd=numA.binaryAdd(numB);
        // dd.outputNumber();

        ExtendedBinaryNumber dde = numA.ANDNumbers(numB);
        dde.outputNumber();

    }
}
4

4 回答 4

0

在类 ExtendedBinaryNumber

@override
public void outputNumber() {
  super.outputNumber();
}

@override
public BinaryNumber ANDNumbers(BinaryNumber second) {
  return super.BinaryNumber();
}

Q6 班

BinaryNumber c=numA.ANDNumbers(numB);
    // c.outputNumber();

ExtendedBinaryNumber dd=numA.binaryAdd(numB);
dd.outputNumber();
于 2012-10-23T03:53:29.950 回答
0

numA.ANDNumbers返回 aBinaryNumber并将其分配给ExtendedBinaryNumber变量。默认情况下,您应该进行向下转换以允许这样做,但请注意ExtendedBinaryNumber在执行该行时您确实返回了一个实例,否则您将拥有一个ClassCastException.

解决此问题的最佳方法是:

BinaryNumber dde=numA.ANDNumbers(numB);
dde.outputNumber();

如果你真的想使用 Java 中的覆盖能力,你可以覆盖ANDNumbers你的类中的方法ExtendedBinaryNumber并返回一个协变类型,在这种情况下是ExtendedBinaryNumber

class ExtendedBinaryNumber {
    public ExtendedBinaryNumber binaryAdd(ExtendedBinaryNumber A) {
        //here goes your actual code...
    }

    @Override
    public ExtendedBinaryNumber ANDNumbers(BinaryNumber second) {
        //fancy override implemententation that returns ExtendedBinaryNumber instance
    }
}

通过这样做,现在您的行可以编译并运行愉快

ExtendedBinaryNumber dde = numA.ANDNumbers(numB);
dde.outputNumber();
于 2012-10-23T03:45:14.367 回答
0

ANDNumbers方法返回BinaryNumber,因此该行中有不兼容的类型ExtendedBinaryNumber dde=numA.ANDNumbers(numB);

于 2012-10-23T03:49:03.040 回答
0

没有覆盖问题。除了方法的返回类型之外,你很好。

改变

    ExtendedBinaryNumber dde = numA.ANDNumbers(numB);

    BinaryNumber dde = numA.ANDNumbers(numB);

作为ANDNumbers方法返回BinaryNumber

于 2012-10-23T03:51:12.630 回答