标签:oid 文件 vat 重写 名称 div 能力 err 作用
多态
• 相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。
即:多态是同一个行为具有多个不同表现形式或形态的能力。
理论举例:
比如有一个父类superClass,它有2个子类subClass1,subClass2。superClass有一个方法
func(),两个子类都重写了这个方法。那么我们可以定义一个superClass的引用obj,让它指向一个子类的对象,比如superClass obj = new subClass1();那么我们调用obj.func()方法时候,会进行动态绑定,也就是obj它的实际类型的func()方法,即subClass1的func()方法。同样你写superClass obj = new subClass2();obj.func()其实调用的是subClass2的func()方法。这种由于子类重写父类方法,然后用父类引用指向子类对象,调用方法时候会进行动态绑定,这就是多态。多态对程序的扩展具有非常大的作用,比如你要再有一个subClass3,你需要改动的东西会少很多,要是使用了配置文件那就可以不动源代码了。
代码实例:
定义Car接口
package com.it.test; public interface Car { //接口中的方法为抽象方法 abstract String getName(); //过去汽车名称 public int getPrice(); //过去汽车售价 }
BMW继承并重写Car
package com.it.test; //宝马 public class BMW implements Car { @Override public String getName() { return "BMW"; } @Override public int getPrice() { return 300000; } }
BENZ继承并重写Car
package com.it.test; //奔驰 public class BENZ implements Car { @Override public String getName() { return "BENZ"; } @Override public int getPrice() { return 400000; } }
Carshop类
package com.it.test; //汽车出售店 public class Carshop { //售车收入 private int money = 0; //卖出一台车 public void sellCar(Car car){ System.out.println("车型:"+car.getName()+"单价:" + car.getPrice()); //增加卖出车售价的收入 money += car.getPrice(); } //售车总收入 public int getMoney(){ return money; } public static void main(String[] args) { Carshop carshop = new Carshop(); //卖出一辆宝马 Car car = new BMW(); //卖出一脸奔驰 Car car1 = new BENZ(); carshop.sellCar(car); carshop.sellCar(car1); System.out.println("总收入:"+carshop.getMoney()); } }
• 多态给我们带来的好处是消除了类之间的耦合关系,使程序更容易扩展。比如在上例中,新增加一种类型汽车的销售,只需要让新定义的类继承 Car 类并实现它的所有方法,而无需对原有代码做任何修改,CarShop 类的 sellCar(Car car) 方法就可以处理新的车型了。
标签:oid 文件 vat 重写 名称 div 能力 err 作用
原文地址:https://www.cnblogs.com/sacai/p/11122853.html