标签:
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! 面向对象之多态
一:多态的概念
多态性在实际中的含义就是不同的对象有相同的一般轮廓或形态,但具体执行的过程却大相径庭。例:驾驶员在开车时都知道“遇到红灯时刹车”,这与驾驶员驾驶的是什么具体
型号的车无关,所有的车都具有相同的一般轮廓或形态的刹车。在java开发中,基于继承的多态就是指对象功能的调用者用超类的引用来进行方法调用。这样,可以极大地提高灵活
性,因为用超类的引用能调用各个部同的子类实现,就像汽车驾驶员可以开各种不同的汽车一样。
下面例子说明了这个问题:
1 //代码实现 2 //定义抽象类Car 3 abstract class Car { 4 // 定义抽象方法brake 5 public abstract void brake(); 6 } 7 8 // 定义非抽象类Truck继承自Car 9 class Truck extends Car { 10 //定义brake方法 11 public void brake(){ 12 System.out.println("正在卡车上刹车!!"); 13 } 14 } 15 //定义非抽象类Mini继承自Car类 16 class Mini extends Car{ 17 //实现brake方法 18 public void brake(){ 19 System.out.println("正在面包车上刹车!!"); 20 } 21 } 22 public class Demo { 23 public static void main(String[] args) { 24 //声明Car型引用c并将其指向Truck类的对象 25 Car c = new Truck(); 26 System.out.print("调用的方法为:"); 27 c.brake(); //使用引用c调用brake方法 28 c = new Mini();//引用c指向Mini类的对象 29 System.out.print("调用的方法为:"); 30 c.brake(); //使用引用c调用brake方法 31 } 32 }
运行结果为:
调用的方法为:正在卡车上刹车!!
调用的方法为:正在面包车上刹车!!
说明:
1)上面的代码中定义了三个类Car,Truck和Mini。其中Car表示汽车,为抽象类,其中有抽象的刹车(brake)方法,
方法的签名表示所有汽车刹车的一般形态。
2)Truck与Mini分别表示车与微型面包车,分别重写实现了他们父类Car中的抽象刹车方法,提供不同具体子类的刹车实现。
3)在主方法中,驾驶者站在汽车的角度(定义Car型引用c),可以去开卡车(引用c指向Truck对象)
同样也可以去开面包车(引用c指向Mini对象)。
二:Java中基于继承的多态的实质含义与作用:
1)实际上,抽象类中的抽象方法,只是起到了契约的作用。例:继承自汽车的非抽象类,必须实现具体的刹车方法,否则编译不通过。
父类中抽象方法的个数是具体子类需要实现方法个数的最低限度,不能比 其少,但是可以比父类中抽象方法的个数多,例如一些子类中特有的方法。
2)因为具体子类遵守了契约,所以对于调用者而言,只要使用父类的引用就可以使用所有具体子类实现的各种不同的共能,父类中的抽象方法,调用者
不必了解子类方法中的实现细节。
3)但是,如果站在具体子类的角度上(使用特定具体子类类型的引用)来看,则就没有这么强的灵活性了,因为特定类型的子类引用只能指向这个类的对象,
要想使用其他类型的对象就不方便了。
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
标签:
原文地址:http://www.cnblogs.com/hmchengxuyuan/p/5002472.html