《黑马程序员》多态———day07

来源:互联网 发布:java api 1.8中文 编辑:程序博客网 时间:2024/06/05 18:43

//多态//多态//多态是指同一个方法根据上下文使用不同的定义的能力。方法的覆写,和方法的重载都可以被看成多态。。//多态有两种表现形式,重载和覆盖/首先说重载(overload),是发生在同一类中。与什么父类子类、继承毫无关系。//标识一个函数除了函数名外,还有函数的参数(个数和类型)。也就是说,一个类中//可以有两个或更多的函数,叫同一个名字而他们的参数不同。 他们之间毫无关系,是//不同的函数,只是可能他们的功能类似,所以才命名一样,增加可读性,仅此而已!//覆盖(override),是发生在子类中!也就是说必须有继承的情况下才有覆盖发生。//我们知道继承一个类,也就有了父类了全部方法,如果你感到哪个方法不爽,功能要变,那//就把那个函数在子类中重新实现一遍。 这样再调用这个方法的时候,就是执行子类中的过程//了。父类中的函数就被覆盖了。(当然,覆盖的时候函数名和参数要和父类中完全一样,不然//你的方法对父类中的方法就不起任何作用,因为两者是两个函数,毫不关系)//但是Java的多态更多是动态绑定放在一起理解的。。//动态绑定是一种机制,通过此机制,对一个已经被重写的方法的调用将会发生在运行时,而不是在编译时去解析。//下面程序演示动态的绑定public class DuoTai {/*** @param args*/public static void main(String[] args) {Animal[] animal = new Animal[3];//创建不同的对象,都存入Animal的引用中animal[0] = new Animal();animal[1] = new Sheeps();animal[2] = new Fish();DuoTai dt = new DuoTai();dt.move(animal[0]);dt.move(animal[1]);dt.move(animal[2]);//运行结果/*动物做运动羊上山跑着玩鱼在水中自由游*///animal[0].breath();//animal[1].breath();//animal[2].breath();//定义一个数组存放Animal对象,存3个元素,分别是Animal、Sheeps、Fish。//分别调用breath()方法。程序执行结果/*动物呼吸羊是用肺呼吸的鱼是用腮呼吸的*///对象是多态的,定义一个Animal对象,它既可以存Animal对象,也可以存放Animal的子类的对象//在子类Sheeps。Fish对象。执行breath方法时会自动调用原来对象的方法。而不是父类的方法//这就是动态绑定}//move 方法首先判断animal对象是哪个类的对象,由判断执行不同的方法。//在判断过程中使用了instanceof运算符,它是用来判断对象类型的一个运算符。//当判断出它的类型后,在对其进行类型转换,得到原始的类型转换后,就可以调用它特有的方法了void move(Animal animal) {//进行对象类型的判断if(animal instanceof Sheeps){((Sheeps)animal).sheepsRun();}else if (animal instanceof Fish) {((Fish)animal).swim();}else {animal.run();}}}class Animal{String type;String name;int age;void eat() {System.out.println("动物吃食物");}void breath() {System.out.println("动物呼吸");}void run() {System.out.println("动物做运动");}}class Sheeps extends Animal {String sheepsType;void sheepsRun(){System.out.println("羊上山跑着玩");}void breath() {System.out.println("羊是用肺呼吸的");}}class Fish extends Animal {String fishType;void swim() {System.out.println("鱼在水中自由游泳");}void breath() {System.out.println("鱼是用腮呼吸的");}}


0 0
原创粉丝点击