0

2進数クラスを拡張しようとしていますが、拡張しようとすると、基本クラスの関数の一部にアクセスできません。たとえば、メインで実行しようとしている最後の関数などです。

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 dde = numA.ANDNumbers(numB);

    BinaryNumber dde = numA.ANDNumbers(numB);

ANDNumbersメソッドがを返すようにBinaryNumber

于 2012-10-23T03:51:12.630 に答える
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を返し、それを変数BinaryNumberに割り当てています。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 に答える