多态的理解

本文详细介绍了Java中的多态性概念,包括其定义、特点和示例代码。通过一个基类Base和子类Son的实例,展示了如何在运行时决定引用变量的方法调用。文章还探讨了多态在实际应用中的表现,如酒类的抽象与不同品牌酒的实现。同时,通过Wine和JNC类的示例,解释了重载与重写方法的区别,以及多态在方法调用中的作用。
摘要由CSDN通过智能技术生成
https://www.cnblogs.com/xieshijie/p/11410812.html

多态

多态性是面向对象中很重要的一个特性,此前的学习因为基础不够扎实,总是没办法理解这一特性,因此,找了几篇文章来看,小结一下。

定义

一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定

不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,

示例

代码
class Base
{
    public void method()
    {
        System.out.println("Base");
    } 
}
class Son extends Base
{
    public void method()
    {
        System.out.println("Son");
    }
     
    public void methodB()
    {
        System.out.println("SonB");
    }
}
public class Test01
{
    public static void main(String[] args)
    {
        Base base = new Son();
        base.method();
        base.methodB();
    }
}
结果
编译不通过
编译看左边,左边没有就没办法编译;运行看右边,即new的对象是谁,就调用谁。

多态示例

	  酒 a = 剑南春

      酒 b = 五粮液

      酒 c = 酒鬼酒

剑南春、五粮液、酒鬼酒都是酒的子类,我们只是通过酒这一个父类就能够引用不同的子类,这就是多态 —— 我们只有在运行的时候才会知道引用变量所指向的具体实例对象。

public class Wine {
    public void fun1(){
        System.out.println("Wine 的Fun.....");
        fun2();
    }
    
    public void fun2(){
        System.out.println("Wine 的Fun2...");
    }
}

public class JNC extends Wine{
    /**
     * @desc 子类重载父类方法
     *        父类中不存在该方法,向上转型后,父类是不能引用该方法的
     * @param a
     * @return void
     */
    public void fun1(String a){
        System.out.println("JNC 的 Fun1...");
        fun2();
    }
    
    /**
     * 子类重写父类方法
     * 指向子类的父类引用调用fun2时,必定是调用该方法
     */
    public void fun2(){
        System.out.println("JNC 的Fun2...");
    }
}

public class Test {
    public static void main(String[] args) {
        Wine a = new JNC();
        a.fun1();
    }
}

输出
-------------------------------------------------
Output:
Wine 的Fun.....
JNC 的Fun2...

jnc重载了父类的方法,重写fun2(),因为重载后的fun1(String a)和fun1()不是一个方法,父类中没有该方法,向上转型后会丢失该方法。

还是不太理解。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值