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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 伍淑江 中级黑马   /  2013-3-17 11:18  /  2495 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 伍淑江 于 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 12:02

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 何仕映 于 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方法,将该方法返回的值在屏幕上打印输出。
回复 使用道具 举报
先说点题外话,我们在定义一个集合的时候通常是这样定义的
List list = new ArrayList();
list是一个接口,而ArrayList是一个实现类,这样做的好处是提高了可维护性,因为后期如果想把ArrayList变成linkList,只需要改这一句就可以了
接着我们看这个程序
在main方法中,首先定义了一个接口的引用,这个引用调用的是一个静态方法  A a=get();
其实这相当于A a = Demo.get()方法,这样就会返回一个B类的对象,虽然说最后是a.test(),但是a这个引用其实是指向了B的一个实例,相当于B的对象调用test方法
回复 使用道具 举报
  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. }
复制代码
报错了!!





回复 使用道具 举报
main是程序的主入口,一行一行执行,每个方法进行执行!就这么简单
回复 使用道具 举报
本帖最后由 黄玉昆 于 2013-3-17 13:42 编辑

话说,你这个代码有问题,先测试一下你的代码,有问题也要一同写上,不要把错误的代码展示出来,如果要展示,需要把错误的提出也一同写出。
你A中根本就没有test()的方法,怎么能用a去调用这个方法呢?除非你在调用的时候强转一下,如:System.out.println(((B) a).test());
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马