请师兄们帮忙啊  , 怎么理解java 中的多态啊???   它真的是帮助程序的可扩展性 而设计的吗??? 越详细越好啊  谢谢啦呵呵呵  

解决方案 »

  1.   

       把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
      赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。 
      举个例子:从一个基类中派生,响应一个虚命令,产生不同的结果。 
      比如从某个基类继承出多个对象,其基类有一个虚方法Tdoit,然后其子类也有这个方法,但行为不同,然后这些子对象中的任何一个可以附给其基类的对象,这样其基类的对象就可以执行不同的操作了。实际上你是在通过其基类来访问其子对象的,你要做的就是一个赋值操作。
      使用继承性的结果就是可以创建一个类的家族,在认识这个类的家族时,就是把导出类的对象 当作基类的的对象,这种认识又叫作upcasting。这样认识的重要性在于:我们可以只针对基类写出一段程序,但它可以适 应于这个类的家族,因为编译器会自动就找出合适的对象来执行操作。这种现象又称为多态性。而实现多态性的手段又叫称动态绑定(dynamic binding)。 
      简单的说,建立一个父类的变量,它的内容可以是这个父类的,也可以是它的子类的,当子类拥有和父类同样的函数,当使用这个变量调用这个函数的时候,定义这个变量的类,也就是父类,里的同名函数将被调用,当在父类里的这个函数前加virtual关键字,那么子类的同名函数将被调用
      class A {
      public:
      A() {}
      virtual void foo() {
      cout << "This is A." << endl;
      }
      };
      class B : public A {
      public:
      B() {}
      void foo() {
      cout << "This is B." << endl;
      }
      };
      int main(int argc, char* argv[]) {
      A *a = new B();
      a->foo();
      return 0;
      }
      这将显示:
      This is B.
      如果把virtual去掉,将显示:
      This is A. 
      前面的多态实现使用抽象类,并定义了虚方法.
      

  2.   

    建议你找本教材好好学习一下,很容易理解的。
    Java中的接口机制,抽象类机制与此密切相关
      

  3.   

    晕,多态这个可是java里最精华的一部分
    自己好好研究下代码或者多看看书哈
      

  4.   

    多态可以用一句话概括:一个接口多种行为。比如说我在anima类里面定义了eat方法,dog、cat、pig、horse等等继承animal类并且覆盖了eat方法了。如果我的代码里面定义了一个animal类型的数组,我在遍历这个数组的时候就可以通过调用animal类里面的eat来实现不同的行为,因为真正执行eat方法的可能是dog、cat、pig等等。个人见解,欢迎批评指正
      

  5.   

    interface Person{}class Chinses implements Person{}class America implements Person{}class Test{
    main(){
    Person c = new Chinese();
    Person a = new America();
    }}
    这是接口实现多态的典型方式;后来成为了工厂模式,后来到spring,就能控制反转了,不用实现工厂方法了。继续学习,总有日你会熟练。 
      

  6.   

    多态--多种形态。。
    具体地说就是对于同一个事情,不同的人会有不同的行为
    比如说speak()对于人来说是说话,对于狗来说是叫
    一般情况下,会建立一个基类的引用(实际拥有的是具体子类的对象)
    在调用基类方法的同时,通过动态绑定机制,找到具体子类中的方法,执行子类的方法。。从而实现了多态的性质。