Java,学到多态这个知识点,说到 多态是运行期的的行为?如何理解?可以举例说明理解更好。

解决方案 »

  1.   

      多态是java的一大特性之一   多态是运行期的的行为
       举个类子:如 张大爷说了句吃饭  张大爷的几个儿子和女儿都来了   
                 相当于 张大爷发出一条通知  张大爷的几个儿子和女儿 自动响应这条消息    这就是多态
      

  2.   

    多态就是多种形态
    人 猫 狗 都是动物
    现在调用 动物.吃饭() 的方法 人 猫 狗可以
    在调用 动物.sayHello()的方法 人可以,猫、狗不可以
    这就是多台的运行期行为
    他是随着你的父类的指针指向你子类的引用去决定的
      

  3.   

    Human h;
    if() h = new CH();
    else h = new JP();Human 两个子类CH JP :
    在运行之前,无法确定h的具体类型。
      

  4.   

    多态是面向对象最重要的性质。
    请楼主看我的代码解释class A {
    public void dosomething(){
    System.out.println("do is done by A");
    }
    }class B extends A{
    public void dosomething(){
    System.out.println("do is done by B");
    }
    }class C extends A{
    public void dosomething(){
    System.out.println("do is done by C");
    }
    }public class Test { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    A ptr1 = new A();      //ptr1的静态类型为A,动态类型为A
    ptr1.dosomething();    //  (1)
    ptr1 = new B();        //程序运行至此处,ptr1的动态类型变为B;
    ptr1.dosomething();   //  (2)
    ptr1 = new C();      //程序运行至此处,ptr1的动态类型变为C;
    ptr1.dosomething();   //  (3)
    //从程序段(1),(2),(3)中可以看出,调用方法始终不变(ptr1.dosomething),可以认为可以保证客户端代码不变
    //你可以修改dosomething的内容的同时不影响客户端代码的变化,这样就将变化和不变的
    //内容实现了解耦,具体说来就是将“策略和实现解耦”
    }}
      

  5.   

    多态的实现是语言底层机制来保证的。
    我知道C++多态的实现就是使用了虚函数指针和对应的虚函数表来实现。至于java,不太清楚。
    多态为什么不体现在变量上,直接原因是语言底层没有提供相应的机制,根本原因不知道。
      

  6.   

    对了,运行的结果是:
    do is done by A
    do is done by B
    do is done by C
    可以看出,语言完全知道那种类型在调用。