java的多态

来源:互联网 发布:http dev.mysql.com 编辑:程序博客网 时间:2024/05/21 06:13

多态;
引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时执行它运行时类型所具有的方法。
因此,编写java代码时,引用变量只能调用声明该变量时所用类里包含的方法。
例如;
通过Object p = new Person()代码定义一个变量p,则这个p只能调用Object类的方法,而不能调用Person类里定义的方法。

——————————————————————————————————————————————————————————————————

多态示例程序:

class BaseClass{    public int book = 6;    public void Base(){    System.out.println("父类的普通方法");    }    public void test(){            System.out.println("父类被覆盖的方法");           }}public class SubClass extends BaseClass{    //重新定义一个book实例变量隐藏父类的book实例变量    public String book = "java开发"  ;    public void test(){        System.out.println("子类覆盖父类的方法");    }    public void sub(){        System.out.println("子类的普通方法");    }    public static void main(String[] args)    {        //下面编译时类型和运行时类型完全一样,因此不存在多态        BaseClass bc = new BaseClass();        System.out.println(bc.book);// 输出6        //下面两次调用将执行BaseClass的方法        bc.Base();        bc.test();        //下面编译时和运行时类型完全一样,因此也不存在多态        SubClass sc =new SubClass();        System.out.println(sc.book);//输出java开发        //下面将执行从父类继承来的方法        sc.Base();        sc.test();        //*******************************        //下面编译时和运行时类型不同,将发生多态        BaseClass ploymophicBc  =  new   SubClass();            System.out.println( ploymophicBc.book);// 输出6,说明了访问的是父类对象的实例变量            //下面将执行从父类继承的得到的base()方法             ploymophicBc.Base();             //下面将调用当前类的方法              ploymophicBc.test();              //因为 ploymophicBc的编译类型是BaseClass,而BaseClass没有提供sub方法,所以下面代码在编译时会出错.              // ploymophicBc.sub();    }}
0 0