class Animal{
    Animal(int x,int y){
        System.out.println("Animal");
    }
}class Dog extends Animal{
    Dog(){
        super(1,2);
    }
}
只有显示的调用super(1,2)才能编译通过     这样感觉有点麻烦  而且很容易出错的说

解决方案 »

  1.   

    是这样的··因为要创建子类对象的话就必须要先调用到父类的构造方法··但是这个时候我们是直接sunClass sun=new sunClss();的··并没有明确的给父类的构造方法传参··所以需要在子类的构造方法内给父类传参··这样继承的关系才在人家构造子类对象的时候得以实现···我是这样理解的··希望对你有帮助
      

  2.   

    加个重载的 Animal(){}     什么也不用放就为了new 子类时方便
      

  3.   

    这种想法有些怪异,等你写代码多了,见过大型软件就会体会到,控制复杂性并节省维护和扩展带来的未来成本远远比少写几行代码重要的多,基本的原则中有一条就是对强制的约束条件就必须强制确保贯彻执行而不要给其它使用它的人留下任何可能的因为偷懒或其它省事而给出错或给将来带来更高成本的机会。千万不要为了省写几行代码而去改动一个正确的设计。打字的时间是不需要太花脑筋的,而如果出错了你去调试就会轻松花去你一天甚至一个星期的时间。谁划算?对于你认为容易出错的情况,我觉得你可以再添加一个 Dog(int x, int y) { super(x,y);} ,如果真是该由调用者决定如何构造 Dog 和 Animal,那就把这个调用构造方法的机会留出调用者,而是 Dog 类自己。
      

  4.   

    纠正:那就把这个调用构造方法的机会留给调用者,而不是 Dog 类自己。
    补充:如果 x,y 是必须的,就不应该给 Animal 添加一个无参构造方法,如果这样做了就走错了方向。只有当应该由调用者决定如何构造Animal的时候才给它添加。