java中的多态

来源:互联网 发布:单片机程序实验流程图 编辑:程序博客网 时间:2024/06/06 04:26
多态是面向对象三大基本特征之一,多态是基于继承的,子类继承父类,因此子类是一种特殊的父类, Java 允许将一个子类对象直接赋值给一个父类引用变量,
无须任何类型转换,这就是向上转型。
 

既然子类对象可以直接赋值给父类引用变量,因此Java 引用变量类型可分为两种情况:一个是声明的类型,一个是实际的类型,所谓声明的类型是指声明该变量时使用的类型,实际时的类型是由实际赋值给该变量的对象决定。

JAVA中引用变量只能调用其声明类型所具有的方法,但运行时则会执行它实际的类型中的方法。也就是说当一个子类对象直接赋值给一个父类引用变量时,只能调用父类所具有的方法,但实际运行时会运行子类的方法(因为父类的方法被覆盖了),这就是多态。

下面看一个例子
class Bird{                    //定义父类鸟类    public void fly(){          //鸟类会飞        System.out.println("I can fly!");    }}class Parrot extends Bird{      //定义鹦鹉类继承鸟类    public void fly(){          //重写fly()方法,有自己特殊的飞的方式        System.out.println("I am a parrot, and I can fly!");    }        public void say(){          //鹦鹉还会说话    System.out.println("I am a parrot, and I can say!");    }}public class Test{public static void main(String[] args) {Bird a = new Parrot();   //将Parrot实例赋值给Bird,编译时类型为Bird,运行时类型为Parrota.fly();    //输出I am a parrot, and I can fly!//a.say();  Bird没有say()方法,不能调用}}


原创粉丝点击