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

java多态
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呢?
  } 
   
}

------解决方案--------------------
如果子类的方法注释上的话,你使用的是父类的方法,当然调用父类的成员变量了。

方法是继承了,但方法里使用的成员变量还是父类的。(不懂可以深入切磋)。
------解决方案--------------------
//明明这个是i2这个对象调用从父类那里继承来的方法,可为什么输出的是Inh1里面的s呢 

i2.print(); 调用的是Inh1的print() 所以是 Inh1 的 s

//如果把上面的注释去掉,那么怎么输出的才会是inh2呢? 
注释去掉 输出的不是inh2吗?
------解决方案--------------------
其实这段代码并没有用到多态,多态应该是这样:inh1 i2 = new inh2();
前面// public void print(){
// System.out.println(s);
// }
这里的inh2中的print方法注释掉了,所以print方法没有被重载,当然就是打印出inh1