多态的定义:就是用基类的引用指向子类的对象。
好处:解决代码紧偶合的问题 就是说通过相对更难的逻辑,方法,来换取代码的可维护性,代码量
具体一个列子:
在Object类中的equals(Object obj)方法中,参数是个Object
类型的参数.因为Object是Java中所有类的基类.,但是才传入参数的时候,可以传入任何一个类的对象
这就是多态的应用!
//通过传入的object的子类的不同实现同一方法的调用而产生不同的结果
这是一个买车然后人用车的几个类
public class Benz{ 1车
public void run(){
System.out.println("Benz在以200迈的速度在run");
}
}
public class Benz{ 2 车
public void run(){
System.out.println("Benz在以200迈的速度在run");
}
}
public class Person{ 3人
/*
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{ //1基类
/*属性*/
public void run();//让子类来运行
}
public Benz extends Driver{ //2子类
public void run(){
System.out.println("Benz在以200迈的速度在run");
}
}
public JD extends Driver{ //3子类
public void run(){
System.out.println("JD is running...");
}
}
public class Person{ //4人
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();
}
}
可以看到:使用多态过后我们的类变为了4个了。逻辑也更为复杂,但是相应的我们的代码的可维护性变得更高了,即在还要加入一类车型的情况下。我们只需要在Drive的基类下添加一个类。然后在main函数里实力化新类,就可以为完成添加。直观的来说我们就是仅仅不用再去改变person里面的代码了。通过对基类的引用指向我们新车的对象。