面向对象三大特征---多态

本文探讨了多态在面向对象编程中的关键作用,通过实例展示了如何通过接口、继承和方法重载实现多态,并阐述其在代码灵活性和扩展性方面的益处。

消息

消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。发送给一个对象的消息定义了一个方法名和一个参数表(可能是空的),并指定某一个对象。对象接收的消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。如有两个类分别是教练和运动员,代码如下:

//教练类
public class Coach {
    private Sportsman sportsman = new Sportsman();
    public void command() {
        sportsman.action("百米");
    }
}

//运动员
public class Sportsman {
    public void action(String item){
        System.out.print(item + "米冲刺");
    }
}

action(String item) 就是消息单元,包括方法名和参数列表。教练(Coach )就是消息发送对象,将该消息发送给运动员;运动员(Sportsman )就是消息接收对象,它包含一个叫aciton的执行方法,将消息名和其参数结合起来进行执行。

多态的概念

多态就是同一消息发送给不同对象,可以得到不同的响应即为多态,即同一消息可以根据发送的对象的不同而采用多种不同的行为方式。接上述示例,如果教练将消息action(String item)发送给歌唱家,则执行结果为不是跑步而是唱歌。

public class Singer {
    public void action(String item){
        System.out.print(item + "唱起来");
    }
}

如何实现多态

实现多态由接口实现 、继承父类重写方法、同一类中进行方法重载三种方式实现

  1. 接口实现
public interface Man {
    void action();
}

public class Singer implements Man {
    public void action(){
        System.out.print("唱起来");
    }
}

public class Sportsman implements Man {
    public void action(){
        System.out.print("百米冲刺");
    }
}

public class Coach {
    private Man man ;
    public Coach(Man aMan){
       man = aMan;
    }
    public void command() {
        man.action();
    }
}

使用接口可以实现教练可以给运动员,也可以给歌唱家发送同样消息,实现多态。

  1. 继承父类重写方法(Override)
public class Actor {
    public void play(){
        System.out.print("表演");
    }
}

public class OperaSinger extends Actor {
    public void play(){
        System.out.print("戏曲表演");
    }
}

OperaSinger是Actor子类,并重置了父类play()的方法,实现了将 play()消息发送给Actor、OperaSinger实现不同的执行方法实现多态。

  1. 同一类中进行方法重载(Overload)
public class Singer implements Man {
    public void action(){
        System.out.print("唱起来");
    }
    
    public void action(Erhu erhu){
        System.out.print("二胡拉起来");
    }

    public void action(Piano piano){
        System.out.print("钢琴弹起来");
    }
}

在Singer 类中有三个方法名(action)一样,但参数不同,实现执行内容不同,实现多态

优点

面向对象技术因多态而生动多变,实现可扩展性和易维护两大目标,主要体现在以下几点:

  1. 可替换性:多态对已存在代码具有可替换性.
  2. 可扩充性:增加新的子类不影响已经存在的类结构.
  3. 接口性:多态是超类通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实现的.
  4. 代码更加灵活性和简单.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值