面向对象开发-多态

什么是面向对象编程

定义:面向对象编程是一种软件开发方法,通过将相关的数据和方法组合在一起以创建其他对象,并以对象之间的交互来构建复杂的系统。
特性和优势:封装(Encapsulation)、继承(Inheritance)、多态性(Polymorphism)和代码模块化等特性,以及提供可重用的代码和增强的可维护性。
在这里插入图片描述

多态的概念

含义和目的:多态性是指通过同一个方法可以实现不同的行为,具体取决于调用方法的对象类型。多态性的目的是通过使用统一的接口来处理不同的对象类型,提高代码的灵活性和可复用性。
实现:在面向对象编程中,通过基类的引用引用子类的对象(强调重点),调用的方法会根据实际的对象类型而表现不同。这是因为子类重写了基类的方法,所以在运行时调用的是子类的方法。

// 平常的写法
ACompanyMethod cm = new ACompanyMethod()
cm.CreateBattery();

//抽象的写法、运用设计模式的写法、多态的写法
AbstractCompanyMethod cm = new ACompanyMethod()
cm.CreateBattery();

多态的实现

继承和方法重写的概念:继承是面向对象编程的基本特性,它允许子类继承父类的属性和方法。方法重写是指子类可以重写继承自父类的方法,以实现特定的行为。
使用父类引用调用子类重写的方法:由于多态性的存在,我们可以通过使用父类的引用来调用子类的重写方法,这样可以实现多态性的特性,根据实际的对象类型来动态调用不同的行为。
主程序:

// 平常的写法
ACompanyMethod cm = new ACompanyMethod()
cm.CreateBattery();

//抽象的写法、运用设计模式的写法、多态的写法
AbstractCompanyMethod cm = new ACompanyMethod()
cm.CreateBattery();

父类:

public abstract class AbstractCompanyMethod
{
    public abstract void CreateBattery()
    {
        Console.WriteLine("I am Creating Battery");
    }
}

子类:

public class ACompanyMethod:AbstractCompanyMethod
{

}

我们可以看到,只在父类实现了代码,子类不再编写代码。减少了工作量,增加了统一度。

如果有其它公司加入进来,或者需要兼容其它公司地业务,就可以很容易地拓展,只要继承就可以。

public class BCompanyMethod:AbstractCompanyMethod
{

}
public class CCompanyMethod:AbstractCompanyMethod
{

}

多态性的优势

灵活性和可复用性:多态性允许我们以统一的方式处理不同类型的对象,使得代码更加灵活和可复用。通过父类引用,不同的子类可以共享相似的功能,同时可以根据需要进行扩展和修改。
强调多态性对于维护和扩展的影响:多态性的存在使得对代码进行修改或扩展时更加方便,因为只需修改相应的子类而不会影响其他代码的逻辑。
如果只是单纯地集成,并不能展示多态地优势。多态还可以根据不同地情况做特殊处理:
原本地写法是这样地:

// 平常的写法
ACompanyMethod cm = new ACompanyMethod()
cm.CreateBattery();

//抽象的写法、运用设计模式的写法、多态的写法
AbstractCompanyMethod cm = Factory.CreatMothod(Setting.CompanyName)//这里改成正常地工厂写法
//Setting.CompanyName为公司名称
cm.CreateBattery();
public class ACompanyMethod:AbstractCompanyMethod
{

}

如果哪天A公司要求变更需求,它地创建电池地方式和别地公司有差别怎么办?那就重写它,重写之后只有它变化了,其他公司不变:

public class ACompanyMethod : AbstractCompanyMethod
{
    public override void CreateBattery()
    {
        // base.CreateBattery();
        Console.WriteLine("ACompany is Creating Battery");
    }
}
public class BCompanyMethod:AbstractCompanyMethod
{

}
public class CCompanyMethod:AbstractCompanyMethod
{

}

如果日后要增加一个电芯测试功能,那么只要在父类中添加就可以,其它公司因为继承就都具备了这种能力。

//如果日后要增加一个电芯测试功能,那么只要在父类中添加就可以
public abstract class AbstractCompanyMethod
{
    public abstract void CreateBattery()
    {
        Console.WriteLine("I am Creating Battery");
    }
    /// <summary>
    /// 检查电芯
    /// </summary>
    public virtual void CheckBattery()
    {
        Console.WriteLine("Checking Battery");
    }
}

如果哪天C公司要求变更需求,它测试建电池地方式和别地公司有差别怎么办?
一样地,就重写它,重写之后只有它变化了,其他公司不变:

public class ACompanyMethod : AbstractCompanyMethod
{
	//重写创造电芯功能
    public override void CreateBattery()
    {
        // base.CreateBattery();
        Console.WriteLine("ACompany is Creating Battery");
    }
}
public class BCompanyMethod:AbstractCompanyMethod
{

}
public class CCompanyMethod:AbstractCompanyMethod
{
	//重写测试功能
	public override void CheckBattery()
    {
        base.CheckBattery();
        Console.WriteLine("CCompany Checking Battery Three Time");
    }
}
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值