我还有另一个示例程序,该程序的确会覆盖它,但是所有方法都具有相同数量的参数。
class A {
int a;
// function with dummy parameters
void printArray(int i) {
System.out.println("A");
}
}
class B extends A {
//function with dummy parameters
void printArray(int i, int s) {
System.out.println("B");
}
}
public class JavaApplication5 {
public static void main(String[] args) {
A ob = new A();
B o2 = new B();
A o3;
o3 = o2;
o3.printArray(3, 2); // It says that it can not be applied to given type :(
}
}
答案 0 :(得分:-1)
如果您不希望出现任何错误,则需要告诉Java解释器,o3可以通过强制转换来调用printArray(3,2)。主要是通过
((B)o3).printArray(3,2);
此外,您正在执行的操作不会覆盖任何内容。 (请注意,您在类A和类B中的方法参数是不同的)重写将是这样的:
class A {
int a;
// function with dummy parameters
void printArray(int i){
System.out.println("A");
}
}
class B extends A {
//function with dummy parameters
@Override
void printArray(int i) {
System.out.println("B");
}
}
public class Example {
public static void main(String[] args) {
A ob = new A();
B o2 = new B();
A o3;
o3 = o2;
o3.printArray(3);
}
}
这里,由于类B覆盖了类A中的方法,因此您不需要强制转换任何内容。就Java解释器而言,类A和类B的任何实例都可以调用printArray,因此,是否对象o3是A类或B类的实例。