什么是多态?为什么用多态?有什么好处? 你的名字 2022-05-20 06:08 275阅读 0赞 **多态可以分为变量的多态,方法的多态,类的多态.我这里强调的是类的多态,这是我们在以后的工作中经常回用到的** 首先,有这样一个系统:有个学生工作从达内毕业了,作的还不错.买了辆捷达汽车.这个系统应该如何设计呢? 按照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原则的一个具体的实现**
还没有评论,来说两句吧...