多态

本文深入解析函数重载与多态的概念,通过实例演示它们的区别,并讲解如何在Java中实现多态,以及多态下静态方法的特殊处理。包括父类引用指向子类对象的实例应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

  比如 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()进行了重写(注意是重写不是重载), 那么就调用子类里的那个方法体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值