如何传递祖父母对象来调用父方法

时间:2018-08-09 07:31:03

标签: java inheritance

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 */

}

3 个答案:

答案 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
       }
    }