什么是多态?为什么用多态?有什么好处?

什么是多态?为什么用多态?有什么好处?多态可以分为变量的多态 方法的多态 类的多态 我这里强调的是类的多态 这是我们在以后的工作中经常回用到的首先 有这样一个系统 有个学生工作从达内毕业了 作的还不错 买了辆捷达汽车 这个系统应该如何设计呢 按照 OO 的思想 我们会抽象出来一个类 表示捷达汽车 其中有个 run 方法 publicclassJ publicvoidru nbsp nbsp nbsp nbsp nbsp nbsp System out println

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

首先,有这样一个系统:有个学生工作从达内毕业了,作的还不错.买了辆捷达汽车.这个系统应该如何设计呢?
按照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中所有类的基类.,但是才传入参数的时候,可以传入任何一个类的对象
这就是多态的应用!

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230585.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号