黑马程序员技术交流社区

标题: 神题 ?帮我看看这个代码,我有好多疑问 [打印本页]

作者: 碎流    时间: 2014-8-21 00:12
标题: 神题 ?帮我看看这个代码,我有好多疑问
class A {
    void fun1() {                                 //6,父类怎么访问子类?
              System.out.println(fun2());
        }
        int fun2() {                              //
                return 123;
        }
}
  class B extends A {                            //5.为什么不可以加public
        int fun2() {
                 return 456;
         }

      public static void main(String args[]) {   //1,主函数定义在这里什么意思?
                B b = new B();   //创建一个类B.
                b.fun1();                        //2,这里怎么会访问到父类的fun1方法?
                A a = b;                         //3,把子类给父类什么意思?
                a.fun1();                        //4,这里怎么实现?
        }

}

运行结果:456    456



作者: hejinzhong    时间: 2014-8-21 07:26

  1. 下面是个人理解,可以参考下,说的不是很透彻,很多概念是需要自己积累学习。
  2. class A
  3. {
  4.      void fun1()
  5.         {                                 //6,父类怎么访问子类?
  6.                 System.out.println(fun2());
  7.         }
  8.         int fun2()
  9.         {                             
  10.         return 123;
  11.         }

  12. }

  13. public class B extends A        //5.为什么不可以加public
  14. {                           
  15.         int fun2()
  16.         {
  17.        return 456;
  18.     }

  19.         public static void main(String args[]) //1,主函数定义在这里什么意思?
  20.         {   
  21.                 B b = new B();   //创建一个类B.
  22.                 b.fun1();                        //2,这里怎么会访问到父类的fun1方法?
  23.                 A a = b;                         //3,把子类给父类什么意思?
  24.                 a.fun2();                        //4,这里怎么实现?
  25.         }
  26. }
  27. /*
  28. 分析:
  29. (1)主函数定义在那里无所谓,只是告诉JVM一个程序的入口,一般可以叫做测试函数。
  30. (2)b是B的对象,B继承了A之后,B就拥有其父类B中的所有非私有方法。
  31. (3)父类B指向其子类A的引用,这就是多态机制
  32. (4)B类型的b类型向上提升为a是A类型的,当调用fun1()时,a他本身有该方法,所以可以使用。假如这里你调用fun2(),返回结果为123.
  33. (5)这里是可以加public,但一个包中,只能有一个public类型的类。因为public类的类名,必须和我们文件名相同,而文件名只有一个。
  34. (6)多态中,父类类型变量可以通过向下转型为其子类类型对象,调用子类中的方法。前提是:该父类类型变量的真实面目是要向下转型子类类型的。(或者:创建子类对象来访问,这样会产生一个新对象)。
  35. */
复制代码


作者: Ezreal    时间: 2014-8-21 09:18
我就看看不说话
作者: 会飞De石头    时间: 2014-8-21 10:14
童鞋 基础一定要认真学,我说说你出问题的原因:
1、对权限模糊 :private public protect 及默认权限;
2、对继承模糊: extend super this 及构造函数;
3、主函数的作用(每个可运行函数都有一个且唯一一个主函数);

加油 !!
作者: Huberry    时间: 2014-8-21 10:39
二楼正解
作者: 王凯路路    时间: 2014-8-21 11:04
我怎么感觉这像是基础试题?  我记得基础试题里就有跟这个差不多的一个题
作者: 复仇者联盟    时间: 2014-8-21 11:16
(3)父类B指向其子类A的引用,这就是多态机制。
上面解释的这个不对吧。




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