php 多态的特点和好处,什么是多态?为什么用多态?有什么好处? - 李浩的博客园 - 博客园...

多态可以分为变量的多态,方法的多态,类的多态.我这里强调的是类的多态,这是我们在以后的工作中经常回用到的

首先,有这样一个系统:有个学生工作从达内毕业了,作的还不错.买了辆捷达汽车.这个系统应该如何设计呢?

按照OO的思想,我们会抽象出来一个类,表示捷达汽车,其中有个run()方法

public class JD{

public void run(){

System.out.println("JD在以120迈的速度在run");

}

}

我们还会抽象出一个类,来代表人.其中有个drive()方法,需要一个汽车类型作为参数,我们先传入一个JD类型的参数

// 这是我们的核心业务类

public class Person{

public void drive(JD jd){

jd.run();

}

public static void main(String args[]){

Person p =new Person();

JD jd = new JD();

p.drive(jd);

}

}

如果你写出这样的代码的话,恭喜你!你中大奖了!---------------------你会被项目精力砍死的!!!!!!!

项目经理为什么会砍你呢?

因为你写的代码偶合性太强了!

如果我们的需求变了,这个学生后来更有钱了,买了一两Benz.那么我们以前的系统怎么办啊.不要指望你作的系统永远不会变化

我们的系统只能修改!这就是项目经理砍你的原因

我们的系统会增加一个Benz类,也有个run()方法

public class Benz{

public void run(){

System.out.println("Benz在以200迈的速度在run");

}

}

我们的核心业务类也要修改

public class Person{

/*

public void drive(JD jd){

jd.run();

}

*/

public void drive(Benz b){

b.run();

}

public static void main(String args[]){

Person p =new Person();

Benz b = new Benz();

p.drive(b);

}

}

以后的情况,我们可以把车抽象出来:

public abstract class Driver{

/*属性*/

public void run();//让子类来运行

}

public Benz extends Driver{

public void run(){

System.out.println("Benz在以200迈的速度在run");

}

}

public JD extends Driver{

public void run(){

System.out.println("JD is running...");

}

}

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

}

public static void main(String args[]){

Person p =new Person();

JD jd = new JD();//刚开始没钱就买辆JD吧

p.setDriver(jd);

p.driver();

Benz benz = new Benz{();//有钱换车了

p.setDriver(benz);

p.driver();

}

}

什么是多态?

简单的说:就是用基类的引用指向之类的对象

提问:多态可以用在什么地方呢?

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

其中方法的参数楼上的兄弟已经给出了代码.我这里给出在方法的返回类型中如何使用多态

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

/**

*   我们将多态使用在方法的返回类型中

*   Car可以是抽象类,也可以是接口,JD和Benz分别继承该类或实现该借口

*/

public class CarFactory{

public Car factory(String carName){

if(carName.equals("JD")){

return new JD();

}else if(carName.equals("Benz")){

return new Benz();

}else{

System.out.println("对比起,不伺候");

return null;

}

}

}

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

另外,我我们在JDK中可以大量的看到多态的应用,比如在Object类中的equals(Object obj)方法中,参数是个Object

类型的参数.因为Object是Java中所有类的基类.,但是才传入参数的时候,可以传入任何一个类的对象

这就是多态的应用!

使用多态可以解决项目中紧偶合的问题,提高程序的课扩展性.是OCP原则的一个具体的实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值