5.4面向对象特性——多态

多态的定义是:
同一操作作用于不同类的实例(即对象),将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结果。
多态性包含 编译时的多态性 及 运行时的多态性两大类,即多态性也分静态多态性动态多态性 两种。
静态多态性 是指:定义在一个类或一个函数中的同名函数,他们根据 参数表(类型 以及个数)区别语义和执行的功能。
动态多样性是指定义在一个类层次的不同类中的重载函数,他们具有相同的函数原型,需要根据指针指向的对象所在类来区别语义,他通过动态动态联编实现。java从多个方面支持多态性,一方面可以通过方法重载实现,另一方面也可以通过继承过程中出现的方法覆盖以及对象转换类型(父类引用指向子类对象)来实现。

1.方法重载【一个类中】(Overloading)和方法覆盖【子类和父类】(Overriding重写)

方法重载 和 方法覆盖 是实现多态性的基本手段,但两者的机制不同。
方法重载 是指一个类中可以有多个方法具有相同的名字,但这些方法的参数不同(类型不同,或个数不同)。
方法覆盖 是指子类的方法名与父类的方法名完全相同,并且返回值类型,入口参数的个数和类型玩全相同,即在子类中重写了父类的同名方法。(只有方法体不同)。

2.运行时动态

【例5-18】

package com.ch5;

public class Ex5_18_Convert {
    public static void main(String[] args) {
        Lady missliu = new Lady();
        missliu.pet = new Dog2();
        missliu.petEnjoy();
        System.out.println("++++++++++++++++++++++++");

        Lady missWang = new Lady();
        missWang.pet = new Bird();
        missWang.petEnjoy();
    } 
}

class Lady{
    Pet pet;
    void petEnjoy(){
        pet.enjoy();
    }
}

class Pet{
    int name;
    Pet(){
        System.out.println("Pet() 构造方法执行完毕。。。。。。。。。。");
    }
    void enjoy(){
        System.out.println("宠物高兴");
    }
}
class Bird extends Pet{ // 方法覆盖
    void enjoy(){
        System.out.println("渣渣.......");
    }   
}
class Dog2 extends Pet{ // 方法覆盖
    void enjoy(){
        System.out.println("汪汪.......");
    }
}

结果:
这里写图片描述

以上程序中,Lady类的成员变量pet 是父类对象。missLiu.pet父类引用指向了子类对象(一个鸟的实例对象),missWang.pet父类引用也同样指向了子类对象(一个狗的实例对象)。此时,父类引用指向子类对象,java只能在运行时根据父类引用的具体指向,选择不同类的方法,实现了用相同的接口完成不同功能,实现了多态性。

由此可以看出,多态性提高了程序的灵活性和编程的效率,程序员可以使用统一的形式实现不同功能的调用,简化了对应用软件的代码编写和修改过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值