黑马程序员技术交流社区

标题: 帮我解释一下这段代码的执行流程 [打印本页]

作者: 伍淑江    时间: 2013-3-17 11:18
标题: 帮我解释一下这段代码的执行流程
本帖最后由 伍淑江 于 2013-3-17 13:49 编辑

interface A{}
class B implements A
{
        public String test()
        {
                return "yes";
        }
}
class Demo
{
        static A get()
        {
                return new B();
        }
        public static void main(String[] args)
        {
                A a=get();

                System.out.println(a.test());
        }
}


作者: 何仕映    时间: 2013-3-17 11:42
本帖最后由 何仕映 于 2013-3-17 11:51 编辑

你的程序编写的有问题,你在程序中运用了多态,但是在接口A中你又没有声明test方法,所以你的程序编译会失败。我修正了你的代码。
  1. interface A
  2. {
  3. public abstract String test(); // 先声明这个方法,否则不能调用
  4. }

  5. class B implements A
  6. {
  7. public String test()
  8. {
  9. return "yes";
  10. }
  11. }
  12. class Demo
  13. {
  14. static A get()
  15. {
  16. return new B();
  17. }
  18. public static void main(String[] args)
  19. {
  20. A a=get();

  21. System.out.println(a.test());
  22. }
  23. }

复制代码
首先执行 A a=get();建立一个B的对象并把在内存中的地址值赋给a。然后用a对象调用test方法,将该方法返回的值在屏幕上打印输出。

作者: Alex shaw    时间: 2013-3-17 11:57
先说点题外话,我们在定义一个集合的时候通常是这样定义的
List list = new ArrayList();
list是一个接口,而ArrayList是一个实现类,这样做的好处是提高了可维护性,因为后期如果想把ArrayList变成linkList,只需要改这一句就可以了
接着我们看这个程序
在main方法中,首先定义了一个接口的引用,这个引用调用的是一个静态方法  A a=get();
其实这相当于A a = Demo.get()方法,这样就会返回一个B类的对象,虽然说最后是a.test(),但是a这个引用其实是指向了B的一个实例,相当于B的对象调用test方法
作者: 爪哇攻城狮    时间: 2013-3-17 12:09
  1. interface A{}
  2. class B implements A
  3. {
  4.         public String test()
  5.         {
  6.                 return "yes";
  7.         }
  8. }
  9. class Demo
  10. {
  11.         static A get()
  12.         {
  13.                 return new B();
  14.         }
  15.         public static void main(String[] args)
  16.         {
  17.                 A a=get();

  18.                 System.out.println(a.test());
  19.         }
  20. }
复制代码
报错了!!






作者: HM张超    时间: 2013-3-17 12:45
main是程序的主入口,一行一行执行,每个方法进行执行!就这么简单
作者: 黄玉昆    时间: 2013-3-17 13:41
本帖最后由 黄玉昆 于 2013-3-17 13:42 编辑

话说,你这个代码有问题,先测试一下你的代码,有问题也要一同写上,不要把错误的代码展示出来,如果要展示,需要把错误的提出也一同写出。
你A中根本就没有test()的方法,怎么能用a去调用这个方法呢?除非你在调用的时候强转一下,如:System.out.println(((B) a).test());




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