java的多态性

来源:互联网 发布:大学网络推广策划书 编辑:程序博客网 时间:2024/04/26 05:50
 
   1. 多态性是指: 允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题
 
   2.
    a、通过覆盖父类的方法来实现,在运行时根据传递的对象引用,来调用相应的方法。

    b、简单概括多态性:当我们将子类对象的引用传给声明为父类的一个对象变量,如果子类有这个方法就调用子类的方法,如果子类没有这个方法就调用父类的这个方法。

    c、多态性的好处:它可以根据在运行的时候,根据我们传递不同对象的引用,来调用不同对象的方法。  
  3.举例说明             
       
 */
 public class Animal
 {  //父类

     int height,weight; // 变量(数据)
 
     Animal(){
          System.out.println("animal construct1");
     }
     Animal(int height, int weight)//父类的构造方法 (带参数的父类构造方法)
     {
          System.out.println("animal construct2");
     }
     void eat()    
     {
          System.out.println("animal eat");
     }   
     void sleep()     
     {
          System.out.println("animal sleep");
     }
     void breathe()     
     {
          System.out.println("animal breathe");
     }
 

}


class Fish extends Animal


     int height;//子类的变量 ,在调用时会隐藏父类的变量。
     Fish()
     {

          //super();//在调用子类构造方法的时候,隐含的调用了 super() 变量,
          //也就是先调用父类的构造方法(不带参数)在调用子类的构造方法。如果父类没有构造方法,编译器就会报错。


          super(30,40);//利用 super 调用带参数的父类构造方法。


          //不能Animal(30,40)这样直接调用父类构造方法。只能用super()调用。
         //父类的构造方法不能被子类继承。
  
           System.out.println("fish construct");
     }
     void breathe()//子类的方法
     {
          super.breathe();//通过 super 特殊变量 可以调用被子类覆盖的父类方法。
          super.height=40;//通过 super 特殊变量 可以调用被子类隐藏的父类变量。
          System.out.println("fish bubble");
     }
}


class Integration {
     static void fn(Animal an)
     {
          an.breathe();
     }
     public static void main(String[] args){
      Animal an = new Animal(); //实例化Animal类的对象,an是对象的reference(引用)
      Fish fh = new Fish();//实例化Fish类的对象,fh是对象的reference(引用)
      an.breathe();//an 调用Animal类的void breathe()方法。
      fh.height=30;//fh给Animal类的变量int height 赋值.继承父类的成员变量.
      fh.breathe();//fh调用它自己的方法,假如它自己没有这个方法但父类(Animal)中有这个方法,它就会调用父类中的这个方法。
      //反之(如果有),它就会调用它自己的方法,这就是方法的覆盖。
  
      //多态性
      Animal an1;//将an1声明为Animal的对象变量。
      Fish fh2 = new Fish();
      fh2.eat();//因为子类没有eat()这个方法,所以这调用的是父类的eat()方法。
      an1=fh;
      an1=fh2;

      Integration.fn(an1);//直接用类名调用静态方法(static)。多态性
     } 
}

输出结果如下:

animal construct1
animal construct2
fish construct
animal breathe
animal breathe
fish bubble
animal construct2
fish construct
animal eat
animal breathe
fish bubble

原创粉丝点击