A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 qihuan 于 2015-7-6 21:20 编辑

  1. /**
  2. * 多态:可以理解为事物存在的多种体验形态。
  3. *                 多态自始至终都是子类对象在做着变化。
  4. * 1.多态的体现
  5. *         父类的引用指向了自己的子类对象。
  6. *         父类的引用也可以接收自己的子类对象。
  7. * 2.多态的前提
  8. *         必须是类与类之间有继承或实现关系。
  9. *         存在覆盖。
  10. * 3.多态的好处
  11. *         提高了程序的扩展性。
  12. * 4.弊端
  13. *        只能使用父类的引用访问父类的成员。
  14. * 5.多态的应用
  15. *         
  16. * 在多态中成员函数(非静态)的特点:
  17. * 在编译时期,参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,没有则失败。
  18. * 在运行时期,参阅对象所属的类中是否有调用的方法。
  19. * 总结:成员函数在调用时,编译看左边,运行看右边。
  20. *
  21. * 在多态中成员变量的特点:
  22. * 无论编译和运行,都参考左边(引用型变量所属的类)。
  23. *
  24. * 在多态中静态成员函数的特点:
  25. * 无论编译和运行,都参考左边。
  26. * @author Qihuan
  27. *
  28. */

  29. abstract class Animal {
  30.         abstract void eat();
  31. }

  32. class Cat extends Animal {
  33.         void eat() {
  34.                 System.out.println("eat fish");
  35.         }
  36.         
  37.         void catchMouse() {
  38.                 System.out.println("catch mouse");
  39.         }
  40. }

  41. class Dog extends Animal {
  42.         void eat() {
  43.                 System.out.println("eat bone");
  44.         }
  45.         
  46.         void watchDoor() {
  47.                 System.out.println("watch door");
  48.         }
  49. }

  50. public class PolyPractice {
  51.         public static void main(String[] args) {
  52. //                Animal cat = new Cat();//类型提升,向上转型
  53. //                cat.eat();
  54. //                Cat c = (Cat) cat;//强制将父类引用转成子类类型。向下转型。
  55. //                c.catchMouse();
  56.                
  57.                 function(new Dog());
  58.         }
  59.         
  60.         public static void function(Animal a) {
  61.                 a.eat();
  62.                 if(a instanceof Cat){
  63.                         Cat c = (Cat) a;
  64.                         c.catchMouse();
  65.                 }else if(a instanceof Dog){
  66.                         Dog d = (Dog) a;
  67.                         d.watchDoor();
  68.                 }
  69.         }
  70. }
复制代码

  1. package practice;

  2. /**
  3. * 多态练习2
  4. * 需求:电脑运行实例。
  5. * @author Qihuan
  6. *
  7. */

  8. //PCI
  9. interface PCI {
  10.         public void open();
  11. }

  12. //主板类
  13. class MainBoard {
  14.         public void run() {
  15.                 System.out.println("mainboard running");
  16.         }
  17.         public void usePCI(PCI p) {
  18.                 if (p != null) {
  19.                         p.open();
  20.                 }
  21.         }
  22. }

  23. //网卡类
  24. class NetCard implements PCI{
  25.         public void open() {
  26.                 System.out.println("netcard running");
  27.         }
  28. }

  29. //声卡类
  30. class SoundCard implements PCI{
  31.         public void open() {
  32.                 System.out.println("soundcard running");
  33.         }
  34. }

  35. public class PolyPractice1 {
  36.         public static void main(String[] args) {
  37.                 MainBoard mb = new MainBoard();
  38.                 mb.run();
  39.                 mb.usePCI(null);
  40.                 mb.usePCI(new NetCard());
  41.                 mb.usePCI(new SoundCard());
  42.         }
  43. }
复制代码


1 个回复

倒序浏览
谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马