java 中父类可以调用子类构造方法吗?为什么?

如果不行的话
class ClassA {}
  class ClassB extends ClassA {}
  class ClassC extends ClassA {}
  public class Test{
  public static void main(String[] args) {
  ClassA p0 = new ClassA();
  ClassB p1 = new ClassB();
  ClassC p2 = new ClassC();
  ClassA p3 = new ClassB();
  ClassA p4 = new ClassC();
  }
  }
这样编写是没错误的
那。。。这是为啥子?

应该是不行的,你考虑下,父类如果不止一个子类,那么要调用子类的构造的时候,如何明确是哪个子类的构造呢?追问

我补充了一下问题,能帮忙看一下嘛?

追答

你说的是这样啊,这个其实不是不是父类调用子类的构造方法,是父类对象的引用指向一个子类的对象,这是可以的,因为按照JAVA继承的设计,子类是可以完全代替父类的,所以父类对象的引用指向一个子类对象是完全可以的,这里就牵扯到JAVA的多态概念了,到时候你调用父类的方法的时候,实际上会调用子类重写的对应方法。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-12-28
java继承是单继承,子类可以使用super()调用父类构造函数,父类无法确认谁继承他,就没法调用子类构造方法追问

我补充了一下问题,能帮忙看一下吗?

第2个回答  2018-06-18
父类是不可以调用子类的构造方法的。但是子类可以通过super(参数名,参数名)。调用父类的构造方法。这是在父类构造方法带有参数的情况下。
相似回答