什么是面向对象编程
定义:面向对象编程是一种软件开发方法,通过将相关的数据和方法组合在一起以创建其他对象,并以对象之间的交互来构建复杂的系统。
特性和优势:封装(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");
}
}