黑马程序员技术交流社区

标题: java中实现多态的机制是什么? [打印本页]

作者: 刘海源    时间: 2012-7-21 18:55
标题: java中实现多态的机制是什么?
求解??
作者: 徐帅    时间: 2012-7-21 20:20
本帖最后由 徐帅 于 2012-7-21 20:23 编辑

java的多态机制体现在编译时多态和运行时多态
分别体现为重载和覆盖

重载:只看同名函数的参数列表
这样可以方便阅读,允许用相同的运算符或方法
却表现出截然不同的意义,例如实现求和运算,
在参数上限定不同的类型。但是他们的作用都是求和
public int  add(int a, int b)
   {  return a+b;}
public double  add(double a, double b)
  {return  a+b ;}

覆盖:子父类方法要一模一样(包括返回值类型)
      当子类继承父类,沿袭了父类的功能,到子类中,但是子类虽具备该功能,         但是功能的内容却和父类不一致,
       这时,没有必要定义新功能,而是使用覆盖特殊,保留父类的功能定义,并重写功能内容。
public void  show()
{
System.out.println("name "+name);
}
public  void show()
{
  System.out.println("name "+name+"::age"+age);
}

作者: 王龙彪    时间: 2012-7-21 20:35
就是函数的重写和覆盖.父类引用子类对象.
作者: 王贵朝    时间: 2012-7-21 20:51
多态是依靠继承来实现的,当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。多态方法只在实例方法中起作用,个人的一些观点。:lol
作者: 李菁    时间: 2012-7-21 22:12
多态的前提是继承,方法的重写和重载是Java多态性的不同表现。重载发生在一个类中.重写发生在子类。
重载:方法名相同,参数列表相同
重写:方法名相同,参数个数不同,参数的类型不同,参数在不同类型的情况下顺序不同

作者: 丁岩    时间: 2012-7-21 23:20
多态的体现:父类的引用指向了自己子类的对象,父类的引用也可以接收自己的子类对象。
多态的前提:必须是类与类之间有关系,要么继承,要么实现,通常还有一种情况是存在覆盖。
多态的弊端:提高扩展性,但只能用父类的引用访问父类的成员。
例如:Animal a= new cat( );//类型提升,向上转型
         a.eat();//猫是动物,调用共同方法:吃
如果想要调用父类的引用,转成子类类型
cat c=(cat)a;//如果想调用猫的特有方法,那么强制将父类的引用转成子类类型
c.catchMouse();
总结一下:我们能转换的是父类指向了自己子类对象的时候,可以被提升,也可以被强制转换。
多态始终是子类对象在做着变化。
记得毕老师上课举了一个例子是:   毕姥爷 x =new 毕老师();//向上转型
                                                毕老师 y  =(毕老师)x;//向下转型
                           




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2