class Animal{
     private int height,weight; 
     public void eat(){
           System.out.println("anuimal eat"); 
     }
     public void sleep(){
      System.out.println("animal sleep"); 
     }
      void  breathe(){
          System.out.println("animal breathe");
      
     }
   //  public static void main(String [] args){
                  
     //}
}
class Fish extends Animal{
        void breath(){
             System.out.println("fish bubble");
         }
         
         
}
 class caoxei{
      public static void main(String [] args){
             Animal an = new Animal();
              Fish fh = new Fish();
              an.breathe();
              fh.breathe();
         }
        
}
运行这估代码 为什么 fh 调用的是 Animal 的breath而孙鑫却说 是fish的breath
我是新手 

解决方案 »

  1.   

    Fish继承了Animal并重写了他的breath()方法,而fh是个指向Fish对象的引用,当然会调用Fish的breath
    就算你Animal fh=new Fish(),fh.breate();这时还是调用Fish的breate,因为这时java多态的特性,
    在执行时对方法进行了动态绑定
      

  2.   

    因为fh是fish的指针,指向的是鱼的实例。
    而鱼的实际重写了父类的breath方法。因此调用的就是鱼的breath方法。
    这就相当于:A公司把厂房卖给了你,你把它装修了一翻,别人看到的是你装修后的房子,但是他实质是A公司的厂房,而如果别人说A公司的厂房指的也就是你装修过的房子
      

  3.   

    class Fish extends Animal{
    void breath(){
    System.out.println("fish bubble");
    }
    这个方法一改是 breathe  你少写个“e”
      

  4.   

    这个运行出来都是animal breathe,因为Fish继承了Animal的时候,你重写了breath()方法,可是你重写的时候写错了void breath(),如果改成void breathe()就对了。
    在重写的时候方法一定要copy
      

  5.   

    你的Animal写的一个是breathe()
    而Fish中写的是breath()
    方法都不一样~~!