Class A {
}
Class B extends A {
public void aMethod(A a){
}
}
class C extends B {
aMethod() /* What argument should i pass in here? I
cannot change class A and Class B */
}
答案 0 :(得分:1)
由于C和B都具有扩展类A,因此在这种情况下,您可以将aMethod
的类A,B或C的实例传递给
答案 1 :(得分:1)
由于B和c都扩展了A,因此您可以将A,B或C的实例传递给引用A的对象。
class A {
}
class B extends A {
public void aMethod(A a){
System.out.println(a.getClass());
}
}
class C extends B {
public static void main(String[] ar){
new C().aMethod(new A()) ;
new C().aMethod(new B()) ;
new C().aMethod(new C()) ;
} /* C has IS a relationship with both A , B and C */
}
您可以将子类对象分配给父类对象。
Parent p = new Child();
这里的子班是B和C。
父母是A
以上代码的输出为:
class collections.A
class collections.B
class collections.C
如果您正在询问有关覆盖的问题,则只有一种方法,因此它不会覆盖任何内容。将对象作为参数传递与调用方法无关。一个方法将根据其运行时对象被调用,因此要真正回答您的问题,您将调用
new B().aMethod(new A()) ;
这将使用Granparent对象作为参数调用B类方法。
答案 2 :(得分:0)
如果要调用方法aMethod(),则可以传递类A,B或C的实例,因为所有这些类都直接或间接继承了类A。
但是,如果要覆盖方法aMethod(),则必须传递与类B中定义的方法相同的参数类型,作为覆盖的手段(如javadocs中所述)-
“具有相同签名(名称,加上数字和其参数的类型)的子类中的实例方法,并且作为超类中的实例方法的返回类型将覆盖超类的方法。”
Class C extends B {
public void aMethod(A a){
//Method Definition here
}
}