日期:2014-05-20  浏览次数:20589 次

SCJP中的一道小题不懂.
class   Super{    
        public   int   i=0;    
        public   Super(String   text){    
        i=1;    
        }    
        }    
        public   class   Sub   extends   Super{    
            public   Sub(String   text){    
              i=2;    
            }    
        public   static   void   main(String   args[]){    
          Sub   sub=new   Sub( "Hello ");    
          System.out.println(sub.i);    
          }    
          }    
        what   is   the   result?            
          A.   compile   will   fail    
          B.   compile   success   and   print   "0 "    
          C.   compile   success   and   print   "1 "    
          D.   compile   success   and   print   "2 "    
选什么啊.谢谢.最好能解释下.

------解决方案--------------------
干吗不运行一下
------解决方案--------------------
父类没有默认构造方法,子类要显示调用
------解决方案--------------------
如果想考SCJP建议你看JAVA2学习指南.我就是看的那个.
------解决方案--------------------
在调用子类的构造函数时先调用父类的默认构造函数,
------解决方案--------------------
假设A是B的父类,B是A的子类。

1、如果程序员没有给类A没有提供构造函数,则编译器会自动提供一个默认的无参数的构造函数,如果用户提供了自己的构造函数,则编译器就不在提供默认的无参数构造函数。

2、子类B实例化时会自动调用父类A的默认构造函数,所以如果A的默认的无参数的构造函数为private,则编译器会报错,而如果A没有提供默认的无参数的构造函数,而提供了其他类型的构造函数,编译器同样会报错,因为B找不到A的默认无参数构造函数。所以,我们最好给父类A提供一个无参数的构造函数。

3、或者在B的构造函数中显示的调用父类A的有参构造函数。super(parameter)

------解决方案--------------------
学习了,up
------解决方案--------------------
在子类的构造方法中第一句应该是super(text);先显示的指定要调用的父类的构造方法。

结贴是个好习惯,谢谢。
------解决方案--------------------
来晚了 帮顶一下!!!
------解决方案--------------------
去了解下构造一个类时方法的调用顺序就明白了
------解决方案--------------------
楼主想考SCJP,最基本的问题一定要懂啊

如果父类只有带参数的构造函数

那么子类的构造函数的第一行必须明确调用
------解决方案--------------------
学习了
------解决方案--------------------
编译错误。因为父类重写了一个构造方法,把原来的无参数的构造方法给覆盖了,
子类继承父类的构造方法默认是继承无参数的,现在父类没有,子类在实例话的时候,要先调用父类的构造方法 ,现在父类无参数的方法没有 所以 编译错误
------解决方案--------------------
学习了