面向对象三大特征之多态——Java笔记(七)
多态:
1 class Preson{ 2 } 3 class Teacher extends Preson{ 4 } 5 6 public class Demo { 7 public static void main(String args[]){ 8 //这行代码就会产生多态 9 Preson p = new Teacher(); 10 } 11 }
父类的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法
把不同的子类对象当作父类类型来看,可以屏蔽不同子类对象之间的差异,写出通用代码,做出通用编程,以适应需求的不断变化
1 //鸟类 2 class Brid{ 3 public void eat() { 4 System.out.println("一般鸟类都吃虫子"); 5 } 6 7 } 8 //麻雀 9 class Sparrow extends Brid{ 10 public void eat(){ 11 System.out.println("我要吃虫子"); 12 } 13 } 14 //老鹰 15 class Eagle extends Brid{ 16 public void eat(){ 17 System.out.println("我是空中霸主,我要吃肉"); 18 } 19 } 20 //觅食 21 class Foraging{ 22 /*public void feed(Sparrow sparrow){ 23 sparrow.eat(); 24 } 25 public void feed(Eagle eagle){ 26 eagle.eat(); 27 } 28 */ 29 /** 30 *上面这两个方法可以改进为下面这一个方法 ,利用多态可以达到一样的效果 31 */ 32 //直接把父类(鸟类)传进去 33 public void feed(Brid brid){ 34 brid.eat(); 35 } 36 } 37 public class TestDemo { 38 public static void main(String[] args) { 39 Foraging foraging = new Foraging(); 40 41 Sparrow sparrow = new Sparrow(); 42 /** 43 * 这行代码就体现了多态 44 * 45 * 运行时根据实际的类型寻找它实际类型的方法 46 */ 47 foraging.feed(sparrow); 48 49 Eagle eagle = new Eagle(); 50 foraging.feed(eagle); 51 52 /** 53 * Eagle eagle = new Eagle(); 54 * 55 * Dog eagle = new Eagle(); 56 * 57 * Sparrow sparrow = new Sparrow(); 58 * 59 * Dog sparrow = new Sparrow(); 60 * 61 * 62 * 也可以改变声明类型,功能的实现也不会变 63 */ 64 65 } 66 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。