多态

来源:互联网 发布:利达信tk832 软件下载 编辑:程序博客网 时间:2024/06/18 13:50

不要把函数重载理解为多态。

  因为多态是一种运行期的行为,不是编译期的行为。

  多态:父类型的引用可以指向子类型的对象。

  比如 Parent p = new Child();

    当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;

    如果有,再去调用子类的该同名方法

  (注意此处,静态static方法属于特殊情况,静态方法只能继承,不能重写Override,如果子类中定义了同名同形式的静态方法,它对父类方法只起到隐藏的作用。调用的时候用谁的引用,则调用谁的版本。)

例如:

    class Father    {        public int a = 10;        public void show()        {            System.out.println("Father");        }    }    class Child : Father    {        public int b = 20;        public void show()        {            System.out.println("Child");        }    }

    <span style="white-space:pre"></span>    Father f = new Child();            f.show();            Console.WriteLine(f.b);
输出结果就是:
Child
10

例如:

 Father father = new Son(); 这样的吧,这有一种专业说法,叫“父类引用指向子类对象”。首先 new Son();是肯定动态创建了一个子类对象的 。 Father father 则是一个创建了一个父类引用对象。 Father father = new Son(); 就是将父类引用指向子类对象,这是java里很常用的用法。这时候如果用father调用方法father,method() ;如果method()方法只有父类有,子类里没有写。那么就调用父类里那个方法体。如果在子类里有对method()进行了重写(注意是重写不是重载), 那么就调用子类里的那个方法体。

0 0