Java类扩展(overriding)
我试图扩展一个二进制数类,但当我扩展时,我无法访问一些基类函数,例如我试图在main中运行的最后一个函数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)
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);
到
asANDNumbers
方法在扩展的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();