A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

大家都知道,多态性,顾名思义就是拥有“多种形态”的含义,是指属性或方法在子类中表现为多种形态。它包括两种类型:静态多态性和动态多态性。
静态多态性就是包括变量的隐藏、方法的重载(指同一个类中,方法名相同[方便记忆],但是方法的参数类型、个数、次序不同,本质上是多个不同的方法);这个很容易理解,用起来也很上手,可是动态多态性我本人感觉很不容易用,我其实就不太明白为什在实际运行时,JVM能够根据父类(或接口)引用所指的具体子类,去调用对应子类?这个问题一直很困解,求高手指教,最好能给出实例,多谢,虚心学习!

3 个回复

倒序浏览
补充:程序代码在编译时到底能不能确定调用的哪一个类的方法?是不是只有在运行时才能确定?
回复 使用道具 举报
静态多态行其实就是函数的重载,在一个类中完成
eg:
class Test
{
public int getValue(int x,int y)
{
  return x+y;
}
public int getValue(int x,int y,int z)
{
  return x+y+z;
}
public double getValue(double x,double y)
{
  return x+y;
}
}
而动态多态性可以理解为方法的重写,必须是在有继承关系的两个或两个以上的类中完成
class A
{
public void show(){}
}
class B extends A
{
public void get(){}
}
class Test
{
public static void main(String... args)
{
  A a = new B();//创建一个父类的引用指向子类的对象,针对你的问题在编译的时候能确定是调用父类的方法,如果是子类的方法会编译失败的,而要调用子类的类型就必须向下转型
  a.show();
  //a.get();//就会编译失败,因为这是子类B特有的方法,要调用子类特有的方法必须就将a转化成B类型
  (B)a.get();
}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马