码迷,mamicode.com
首页 > 其他好文 > 详细

什么是多态?为什么要使用多态

时间:2020-06-25 19:25:07      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:else   可维护性   目的   实现   派生类   继承   一句话   分析   简单   

用最简单的一句话就是:父类型的引用指向子类型的对象。用一句比较通俗的话:同一操作作用于不同的对象,可以产生不同的效果。这就是多态。

这句话很好理解:Person person = new Student("张三");但是这个多态有什么作用呢?而我们又为什么要是有多态呢?

首先讲下封装和继承:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面,他把实现的细节影藏起来了,比如你在java中去实现一个类,这个类中提供了一些功能方法,你只需要知道你需要传递什么样的参数,会达到什么样的效果,实现细节在类中定义好了。从而使得代码模块化;而继承可以扩展已存在的代码模块,而目的就是为了代码重用。

那么多态除了代码的复用,还可以解耦。然而为什么要解耦?耦合度讲的是模块模块之间,代码代码之间的关联度,通过对系统的分析把他分解成一个一个子模块,子模块提供稳定的接口,达到降低系统耦合度的的目的,模块模块之间尽量使用模块接口访问,而不是随意引用其他模块的成员变量。


多态有什么好处?

有两个好处:

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;
}
}
}

 

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

 

什么是多态?为什么要使用多态

标签:else   可维护性   目的   实现   派生类   继承   一句话   分析   简单   

原文地址:https://www.cnblogs.com/zhang321/p/13192588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!