安博思软
Java 基 础 知 识
多 态
www. sram-edu.com
安博思软
多态(Polymorphism)
所谓多态,是指把类
中具有相似功能的不
同方法使用同一个方
法名来实现,从而可
以使用相同的方式来
调用这些具有不同功
能的同名方法。简单
来说就是多态是具有
表现多种形态的能力
的特征 。
打印机
打印
打印
彩色打印机
黑白打印机
打印效果:彩色
打印效果:黑白
www. sram-edu.com
安博思软
安博思软
为什么会出现多态?
Java 中的引用变量有两个类型,一个是编译时的类
型,一个是运行时的类型,编译时的类型由声明该变
量时使用的类型决定,运行时的类型由实际赋给该变
量的对象决定。如果编译时的类型与运行时的类型不
一致就会出现所谓的多态。(Polymorphism)
www. sram-edu.com
安博思软
www. sram-edu.com
安博思软
多态性有两种:
l 编译时多态性(静态绑
l 运行时多态性(动态
定)
绑定)
对于多个同名方法,如果在编
译时能够确定执行同名方法
中的哪一个,则称为编译时多
态性。
如果在编译时不能确定,只能
在运行时才能确定执行多个
同名方法中的哪一个,则称为
运行时多态性。
www. sram-edu.com
静态绑定
动态绑定
安博思软
class Test
{
void print()
{
System.out.println(“hello ”);
}
void print(String x)
{
可以看到一个类中成员方法的重载,也
System.out.println(“hello ”+x);
就是一个静态绑定,系统会在你编
}
public static void main(String []args)
译的时候根据你调用的方法参数列表来
{
动态的决定调用哪一个函数
Test ts = new Test();
ts.print();
ts.print(“jack”);
}
}
class Test
{
void print()
{
System.out.println("hello Test");
}
class A extends Test
{
void print()
{
System.out.println("hello A");
}
public static void main(String []args)
{
Test a=new A();
a.print();
}
}
可以看到子类覆写了父类的方法,
也就是一个动态绑定,系统会
在运行时动态的决定调用子类覆写后
方法来实现
www. sram-edu.com
安博思软
安博思软
多态:实现多态三个条件:
1:继承
2:重写(重写父类继承的方
法)
3:父类引用指向字类对象
www. sram-edu.com
多态的实现:通过继承实现
安博思软
JAVA中,一个类之能有一个父类,不能多继承。一个父类可
以有多个子类,而在子类里可以重写父类的方法,这样每个子
类里重写的代码不一样,自然表现形式就不一样。
这样用父类的变量去引用不同的子类,在调用这个相同的
方法的时候得到的结果和表现形式就不一样了,这就是多态,
相同的消息(也就是调用相同的方法)会有不同的结果
www. sram-edu.com