我觉得
1、先执行基类的显示初始化int i = 99; 
2、执行基类的构造函数,
 Base(){ 
            amethod(); 
        } 
3、 public void amethod(){ 
                System.out.println("Base.amethod()"); 
        } 
4、派生类的显示初始化, int i = -1; 5、派生类的构造函数,这里没有。所以该输出Base.amethod() 呀,为什么呀?

解决方案 »

  1.   

    呀,java板块怎么没人回答呀,还是学c++好了,哪的人比这热情多了。
      

  2.   

    个人理解
    Base b = new Derived(); 
    首先实例化出来的是子类而不是父类
    然后调用父类的构造方法,调用amethod()方法,但这个方法在子类中被覆盖了.
      

  3.   

    好按照你的理论这程序咋解释
    class Parent{
          private void method1(){
                 System.out.println("Parent's method1()");
          }
          public void method2(){
                method1();
         }
    }
    class Child extends Parent{
          public void method1(){
                   System.out.println("Child's method1()");
           }
          public static void main(String args[]){
                Parent p = new Child();
              p.method2();
          } 
    }输出Parent's method1()这为什么没多态了
      

  4.   


    还是多态,是调用子类中的method2方法,子类中的方法代码如下
    public void method2(){
               super.method2();
        } 
      

  5.   

    我知道你哪里还没看明白Child extends Parent
    意思是child继承了Parent的非私有的成员变量和方法。
    这样,child类中如果没有重写parent中的方法,那么它会调用父类中的方法相当于如下代码
    public void method2(){
              super.method2();
        } 
    但是这个时候,父类调用的方法method1()等价于
      public void method2(){
                this.method1();
         } 
     不知道你现在明白了没有
      

  6.   

    楼主在8楼的回复是存在问题的,之所以没有多态,是因为你Parent类的方法method1被private修饰了,不会被子类覆盖,所以不可能有多态的存在,而前面的被子类覆盖了,所以又多态。
      

  7.   

    private 私有方法
    不会被覆盖
      学习啦
      

  8.   

    应该弄清楚类的初始化顺序,由于子类覆盖了父类,所以初始化父类时输出Derived.amethod() 
      

  9.   

    new那個,就調用哪個!所以就是調用Derived();