这是我们课件上的6个条件1.派生类对象的方法调用必须通过一个基类类型的变量进行。
2.调用的方法必须在派生类中被定义。
3.调用的方法也必须被声明为基类的一个成员。
4.基类和派生类中对应的方法的签名必须相同。
5.基类和派生类的方法的返回对象类型必须相同或者返回对象类型必须是协变的。
6.派生类的方法的访问说明符不能比基类有更多的限制。对于第一条不理解"必须通过一个基类类型的变量进行"这是什么意思,我没用基类的一个示例调用子类方法也没错啊.

解决方案 »

  1.   

    这个意思是比如 类B是类A的子类那么多态的表现形式是  A b = new B();这时候调用方法 : b.foo(); 必须满足你说的条件
      

  2.   

    如果直接 B b = new B(); 那么这就和多态没有什么关系,只是一个普通的类对象的实例化。往往有些时候我们需要根据条件作出不同的实例化,比如类B、C继承类AA x = null;
    if (条件1) x = new B();
    else if (条件2) x = new C();
    else x = new A();