黑马程序员技术交流社区

标题: 有人可以解释下多态这道题么 [打印本页]

作者: pal_xie    时间: 2016-5-10 23:53
标题: 有人可以解释下多态这道题么
  1. public class Test200 {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 A a = new B();
  7.         a.show();

  8.         B b = new C();
  9.         b.show();
  10.         }

  11. }
  12. class A {
  13.     public void show() {
  14.         show2();
  15.     }
  16.     public void show2() {
  17.         System.out.println("我");
  18.     }
  19. }
  20. class B extends A {
  21.     public void show() {
  22.         super.show();
  23.     }
  24.     public void show2() {
  25.         System.out.println("爱");
  26.     }
  27. }
  28. class C extends B {
  29.     public void show() {
  30.         super.show();
  31.     }
  32.     public void show2() {
  33.         System.out.println("你");
  34.     }
  35. }
复制代码

输出的是  爱  你
  1. public class Test200 {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 A a = new B();
  7.         a.show();

  8.         B b = new C();
  9.         b.show();
  10.         }

  11. }
  12. class A {
  13.     public void show() {
  14.         show2();
  15.     }
  16.     public void show2() {
  17.         System.out.println("我");
  18.     }
  19. }
  20. class B extends A {
  21.     public void show() {
  22.         super.show2();
  23.     }
  24.     public void show2() {
  25.         System.out.println("爱");
  26.     }
  27. }
  28. class C extends B {
  29.     public void show() {
  30.         super.show();
  31.     }
  32.     public void show2() {
  33.         System.out.println("你");
  34.     }
  35. }
复制代码

输出的是 我  我
两段的代码差别是   类B里show()方法   里super.show()改成了super.show2()
作者: a843443554    时间: 2016-5-11 00:42
a调用B里的show()方法。B的show方法又调用了父类A的show()方法,A的show()方法里定义调用show2()方法。a输出B里的show2方法。输出   爱
b调用C里面的show()方法,C里的show()方法又调用了C父类B的show()方法,B的show()方法调用了A的show()方法,A的show()方法定义调用了show2()方法。b输出了C里面的show2()方法。 输出  你

你写的那个
a调用B里的show()方法。B的show方法又调用了父类A的show2()方法 直接输出 我
b调用C里面的show()方法,C里的show()方法又调用了C父类B的show()方法,B的show()方法调用了A的show2()方法,又直接输出了 我。
作者: xzy645181797    时间: 2016-5-11 01:35
方法就是编译看左边,运行看右边。能不能编译通过就看父类里有没有这个方法,运行看右边就是运行的时候运行子类里面的该方法。用这个公式去套就可以了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2