【超经典】Java多态有什么好处?怎样用?

多态可以分为变量的多态,方法的多态,类的多态.我这里强调的是类的多态,这是在以后的工作中经常会用到的。多态的表现形式有方法重载,方法改写,多态变量和泛型。重载是一种静态的多态性,在程序编译时确定被调用的方法,称为早绑定。而多态变量和改写相结合之后,方法的调用在运行时才能确定,是动态的多态性,称为晚绑定。

首先,有这样一个系统:有个学生从兰理工毕业了,做得还不错.买了辆捷达汽车.这个系统应该如何设计呢?
按照面向对象的思想,我们会抽象出来一个类,表示捷达汽车,其中有个run()方法
public class JD{
    public void run(){
         System.out.println("JD在以120迈的速度在run");
    }
}
我们还会抽象出一个类,来代表人.其中有个drive()方法,需要一个汽车类型作为参数,我们先传入一个JD类型的参数
// <strong><span style="color:#ff0000;">这是我们的核心业务类</span></strong>
public class Person{
    public void <span style="color:#ff0000;">drive(JD jd)</span>{     <span style="color:#ff0000;">//写死了类型,修改麻烦</span>
         jd.run();
    }
 
    public static void main(String args[]){
        Person p =new Person();
       JD jd = new JD();
      <span style="color:#ff0000;"> p.drive(jd);    //只能传入JD类型
</span>    }
}
如果你写出这样的代码的话,恭喜你! 你完蛋了-------------项目经理会有砍死你的冲动!!!!!!!
项目经理为什么会砍你呢? ---------因为你写的 代码偶合性太强了!
 
如果我们的需求变了,这个学生后来更有钱了,买了一两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.drive();
   Benz benz = new Benz{();//有钱换车了
   p.setDriver(benz);
   p.drive();
}
}
哈哈,童靴们仔细体会一下多态的好处吧!!!





  • 15
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值