class   Inh1{ 
        public     String   s   ="inh1"; 
        public   void   print(){ 
                System.out.println(s); 
        } 

 class   Inh2   extends   Inh1{ 
        public     String   s   ="inh2"; 
       // public   void   print(){ 
             //   System.out.println(s); 
       // } 
} public class  Main   { 
                  public   static   void   main(String[]   args)   { 
                Inh2   i2   =new   Inh2(); 
                i2.print(); //明明这个是i2这个对象调用从父类那里继承来的方法,可为什么输出的是Inh1里面的s呢
                                //如果把上面的注释去掉,那么怎么输出的才会是inh2呢?
        } 
        

解决方案 »

  1.   

    //明明这个是i2这个对象调用从父类那里继承来的方法,可为什么输出的是Inh1里面的s呢      i2.print();  调用的是Inh1的print() 所以是 Inh1 的 s//如果把上面的注释去掉,那么怎么输出的才会是inh2呢? 
       注释去掉  输出的不是inh2吗?
      

  2.   

    Inh2   不是从Inh1继承吗?当然包括成员变更和方法啊那么i2.print();  不应该是调用从父类那里继承来的print() 方法吗?这个应该不应该是Inh2的吗?因为继承过来了呀
      

  3.   

    其实这段代码并没有用到多态,多态应该是这样:inh1 i2 = new inh2();
    前面// public   void   print(){  
                 //   System.out.println(s);  
           // }  
    这里的inh2中的print方法注释掉了,所以print方法没有被重载,当然就是打印出inh1