zoukankan      html  css  js  c++  java
  • java基础_多态

    多态:相同类型的变量,调用同一个方法呈现出多种不同的行为特征,这就是多态。

      父类引用指向子类对象才有可能产生多态。
    用下面的例子进行分析。class Base
    {
            public int x = 10;
            public  void base(){
                    System.out.pritnln("父类的方法");
            }
            public void ploy(){
                    System.out.println("父类被子类覆盖的方法");
            }
    }
    class Sub extends Base

            public int x = 90;
            public void sub(){
                    System.out.println("子类的方法");
            }
            public void  ploy(){
                    System.out.ptintln("子类覆盖父类的方法");
            }
    }
    class Test
    {
            public static void main(String[] args){
                    //编译时类型和运行时类型完全一样因此不存在多态
                    Base b = new Base();
                    //输出10
                    System.out.println(b.x);
                    //执行Base里的方法
                    b.base();
                    //执行Base里的方法
                    b.ploy();
                    //编译时类型和运行时类型完全一样因此不存在多态
                    Sub s = new Sub();
                    //输出90
                    System.out.println(s.x);
                    //调用从父类继承到的base方法。
                    s.base();
                    //执行当前类的方法
                    s.sub();
                    s.ploy();
                    //编译时类型和运行时类型不一样,可能发生多态
                    Base base = new Sub();
                    //输出10 -----表明访问的是父类的Field
                    System.out.println(base.x);
                    //执行从父类继承到的base方法
                    base.base();
                    //执行当前类的ploy方法
                    base.ploy();
                    //因为base的编译时类型是Base
                    //Base类没有提供sub方法所以下面代码编译时会出现错误
                    base.sub();
            }
    }

    把一个子类对象直接赋给一个父类引用变量,无需任何类型转换,被称为向上转型,向上转型由系统自动完成,
    引用变量在编译阶段只能调用其编译时多具有的方法,运行时执行他运行时类型所具有的方法。
    通过引用变量来访问其包含的实例field时,系统总是试图访问它编译时类型所定义的field,而不是它运行时类型所定义的Field。

    子类和父类的方法有三种关系。
    1父类方法和子类方法同名,子类会覆盖父类的方法。
    2,子类方法会继承父类的所有public方法。
    3,子类的扩展方法,在父类里没有。

    大家可根据这三种关系,加深多态时,引用变量调用方法的情况

  • 相关阅读:
    斐波那契比率(2016-9-13)
    MQL5备忘(2016-8-28)
    [转载]联邦基金利率期货
    二十四节气对照表
    [Android] 为Android安装BusyBox —— 完整的bash shell(收藏用)
    如何调试分析Android中发生的tombstone
    Android log系统 转
    android 系统log文件路径
    GCM Architectural Overview
    google cloud message 运行成功0621
  • 原文地址:https://www.cnblogs.com/grkbeyond/p/4147269.html
Copyright © 2011-2022 走看看