详谈多态

       多态性来自于希腊语,意思是“有许多形态”。在面向对象的软件技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。也就是说,在类等级的不同层次中可以共享(公用)一个行为(方法)的名字,然而不同层次中的每个类却按自己的需求来实现这个行为。当对象接收到发送给它的消息时,根据该对象所属的类 动态选用在该类中定义的实现方法。

      多态性机制不仅增加了面向对象软件系统的灵活性,进一步减少了信息冗余,而且显著提高了软件的可重用性和可扩充性。当扩充系统功能增加新的实体类型时,只需派生出与新实体类相应的新的子类,并在派生的新的派生出的子类中定义符合该类需要的方法,完全无需修改原有的代码,甚至不需要重新编译原有的程序(仅需要编译新派生类的源程序,在与原有的程序连接)

 

在Java语言中,多态主要有以下两种表现形式: 

编译时多态----方法的重载(Overload)

重载是指同一个类中有多个同名的方法,但这些方法有不同的参数,因此在编译时就可以确定到底调用哪个方法,它是一种编译时多态。重载可以看成一个类中方法的多态性。

方法重载的定义:一个类中有多个同名方法(构造方法或普通方法),在调用这些方法时,到底调用哪个方法取决于调用方法时传入的参数的数据类型和个数。 

public class Teacher {

	public static void print(int age, String name) {
		System.out.println(age + "," + name);
	}

	public static void print(String name, int age) {
		System.out.println(name + "," + age);
	}

	public static void main(String[] args) {
		print(33, “王小红”);// 依次传入int类型和String类型数据,所以调用第一个方法
		print("王小红", 33);//依次传入String类型和int类型数据,所以调用第二个方法
	}
}

 

运行时多态----方法的重写或覆盖(Override

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多态是面向对象编程的一个重要特性,它允许在派生类中重写基类中的同名方法,并且在运行时根据对象的实际类型来选择正确的方法实现。多态性可以通过虚函数来实现。 在多态性的实现中,程序可以使用基类指针或引用指向派生类对象,并调用同名的虚函数。在运行时,程序会根据指针或引用指向的对象的实际类型来选择正确的函数实现。 例如,我们可以定义一个基类 `Shape` 和它的两个派生类 `Circle` 和 `Rectangle`,并在 `Shape` 类中声明一个虚函数 `draw()`,在派生类中重写 `draw()` 方法: ```c++ class Shape { public: virtual void draw() { // 基类中的默认实现 } }; class Circle : public Shape { public: void draw() override { // 画圆形的实现 } }; class Rectangle : public Shape { public: void draw() override { // 画矩形的实现 } }; ``` 现在,我们可以使用指向 `Shape` 类的指针或引用来指向 `Circle` 或 `Rectangle` 对象,并调用它们的 `draw()` 方法: ```c++ Shape* s1 = new Circle(); Shape* s2 = new Rectangle(); s1->draw(); // 调用 Circle 类中的 draw() 方法 s2->draw(); // 调用 Rectangle 类中的 draw() 方法 ``` 在这个例子中,`s1` 指向一个 `Circle` 对象,因此调用 `s1->draw()` 时会调用 `Circle` 类中的 `draw()` 方法。类似地,`s2` 指向一个 `Rectangle` 对象,因此调用 `s2->draw()` 时会调用 `Rectangle` 类中的 `draw()` 方法。 多态性让程序具有更高的灵活性和可扩展性,因为它允许我们在不改变基类代码的情况下增加新的派生类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值