Java类扩展(overriding)

Java类扩展(overriding),java,Java,我试图扩展一个二进制数类,但当我扩展时,我无法访问一些基类函数,例如我试图在main中运行的最后一个函数 import java.util.*; class BinaryNumber { private boolean b[]; public void setBit(int index, boolean value) { b[index] = value; } public boolean getBit(int index)

我试图扩展一个二进制数类,但当我扩展时,我无法访问一些基类函数,例如我试图在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;
    }
}
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();

    }
}

numA.ANDNumbers
返回一个
BinaryNumber
并将其分配给一个
extendedbarynumber
变量。默认情况下,您应该执行向下转换以允许此操作,但请注意,在执行该行时确实返回了一个
ExtendedBinaryNumber
实例,否则将出现
ClassCastException

解决这一问题的最佳方法是:

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

如果您确实想在Java中使用重写功能,可以在
ExtendedBinaryNumber
类中重写
和numbers
方法,并返回协变类型,在本例中,协变类型将是
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();

ANDNumbers
方法返回
BinaryNumber
,因此行
extendedbarynumberdde=numA.ANDNumbers(numB)中存在不兼容的类型

没有覆盖问题。除了方法的返回类型之外,您还可以

改变

    ExtendedBinaryNumber dde = numA.ANDNumbers(numB);


as
ANDNumbers
方法在扩展的BinaryNumber类中返回
BinaryNumber

@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();

“无法访问某些基类函数”是什么意思?你有例外吗?编译器错误?请更新您的帖子并告诉我们您遇到了什么错误/异常。如果我理解您的问题:“我试图在main中运行的最后一个函数”是“ANDNumbers()”。但是你让它把它的返回值放到一个ExtendedBaryNumber中,然后这个方法返回一个BinaryNumber,我明白了。但我将返回类型设置为extentedbinary。那么如果我用simplebinary做一个对象,它又不起作用了,你有什么例外?
@override
public void outputNumber() {
  super.outputNumber();
}

@override
public BinaryNumber ANDNumbers(BinaryNumber second) {
  return super.BinaryNumber();
}
BinaryNumber c=numA.ANDNumbers(numB);
    // c.outputNumber();

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