首页 > 其他分享 >什么是多态?为什么用多态?有什么好处?多态在什么地方用?

什么是多态?为什么用多态?有什么好处?多态在什么地方用?

时间:2022-12-14 18:34:26浏览次数:46  
标签:driver 什么 Driver 多态 好处 void JD public

什么是多态?为什么用多态?有什么好处?多态在什么地方用?

什么是多态?

概念:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象。

为什么要用多态呢?

原因:我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态除了代码的复用性外,还可以解决项目中紧偶合的问题,提高程序的可扩展性.。耦合度讲的是模块模块之间,代码代码之间的关联度,通过对系统的分析把他分解成一个一个子模块,子模块提供稳定的接口,达到降低系统耦合度的的目的,模块模块之间尽量使用模块接口访问,而不是随意引用其他模块的成员变量。

多态有什么好处?

有两个好处:

1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。//继承 
2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。 //多态的真正作用,

多态在什么地方用?

可以用在方法的参数中和方法的返回类型中。

在方法中的参数,请看下面的例子:

复制代码

public abstract class Driver
{
public void run();//让子类来运行
}

class SBenz : Driver
{
public void run()
{
Console.WriteLine("Benz在以200迈的速度在run");
}
}

class JD : Driver
{
public void run()
{
Console.WriteLine("JD is running...");
}
}

class Person
{
private Driver driver;
public Person()
{

    }
    public Person(Driver driver)
    {
        this.driver = driver;
    }
    public void drive()
    {
        driver.run();
    }
    public void setDriver(Driver driver)
    {//运用参数多态,以后不管买什么车都可以
        this.driver = driver;
    }

}

static void Main(string[] args)
{
Person p = new Person();
JD jd = new JD();//刚开始没钱就买辆JD吧
p.setDriver(jd);
p.drive();
SBenz benz = new SBenz();//有钱换车了
p.setDriver(benz);
p.drive();
}

复制代码

在方法的返回类型中,请看下面的例子:

上面的例子中,不管是JD还是Benz都是我们自己直接new出来的.我们可以设计一个工厂类,专门生成汽车

/**
*   我们将多态使用在方法的返回类型中
*   Driver可以是抽象类,也可以是接口,JD和Benz分别继承该类或实现该借口

*/

复制代码

public class CarFactory
{
public Driver factory(String carName)
{
if (carName.Equals("JD"))
{
return new JD();
}

        else if (carName.Equals("Benz"))
        {
            return new SBenz();
        }

        else
        {
            Console.WriteLine("对比起,不伺候");
            return null;
        }
    }
}

复制代码

这实际上就是设计模式中的简单工厂模式!

类型的参数.,传入参数的时候,可以传入任何一个类的对象,只要是对应的类的对象名称就可以了
这就是多态的应用!

标签:driver,什么,Driver,多态,好处,void,JD,public
From: https://www.cnblogs.com/xiedy001/p/16982925.html

相关文章

  • 为什么MD5算法不可逆,但网上有很多网站声称能够解密MD5
    我们要明白,MD5不是加密算法,而是一种信息摘要算法,主要用于保证数据的完整性,以及数据不被篡改。既然不是加密算法,那么就不存在解密的说法,但是为什么网上有很多网站声称能够解......
  • 为什么MD5算法不可逆,但网上有很多网站声称能够解密MD5
    我们要明白,MD5不是加密算法,而是一种信息摘要算法,主要用于保证数据的完整性,以及数据不被篡改。既然不是加密算法,那么就不存在解密的说法,但是为什么网上有很多网站声称能够解......
  • 为什么MD5算法不可逆,但网上有很多网站声称能够解密MD5
    我们要明白,MD5不是加密算法,而是一种信息摘要算法,主要用于保证数据的完整性,以及数据不被篡改。既然不是加密算法,那么就不存在解密的说法,但是为什么网上有很多网站声称能够解......
  • JAVA多态(超详细讲解)
    JAVA多态(超详细讲解)坠水于 2021-10-2914:29:56 发布31330收藏144版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。......
  • Java 继承解决了编程中的什么问题
    Java继承解决了编程中的什么问题?Java继承产生的背景?继承产生的原因:在一个项目中多个类具有很多相同的代码段,代码多了不仅仅容易出错,在需要系统升级的时候各个相同的代......
  • java中的多态
    本文主要讲述java中的多态性质代码结构如图:Animal类:publicclassAnimal{privateStringname;publicAnimal(Stringname){this.name=n......
  • IPv6改造为什么这么难?IPv6改造方案难点总结-中科三方
      据统计,截至2019年6月,我国IPv6活跃用户数仅为1.3亿,而到2020年底,这个数字需超过5亿。目前网上最早关于IPv4地址枯竭的新闻可追溯到2004年,来源京华时报。     ......
  • 为什么 Dapr 如此令人兴奋
    如今你构建软件,您可以从数量众多的云服务中进行选择。仅AWS就每个月都在不断为其200多项服务添加新服务,而其他云提供商也都在跟上。如果您的公司想与您的竞争对手竞争,您......
  • GO语言凭什么是区块链的首选语言
    GO语言凭什么是区块链的首选语言区块链的火热也带动了GO语言开发者的突增,那凭什么GO语言会成为最主要的区块链构建语言之一。我认为这得益于GO语言的性能、抽象度、简单性......
  • C++基础篇之什么是数据类型
       ......