黑马程序员技术交流社区

标题: 关于练习四中的一些小问题,求高手指点 [打印本页]

作者: zhangle    时间: 2014-4-14 08:03
标题: 关于练习四中的一些小问题,求高手指点
本帖最后由 zhangle 于 2014-4-14 15:46 编辑
  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. }
复制代码
该段代码结果为编译失败,但是不会详细分析,求高手指点

作者: Up↑Lee↗    时间: 2014-4-14 08:19
程序中a是A的对象,但是A中没有Test方法,你a.test();必然会报错
作者: yanzhendong    时间: 2014-4-14 08:21
通过接口只能调用接口中有的方法,也就是说将类B向上转型为接口A时,是不能调用接口A中以外的方法的
作者: 呆呆沙师妹    时间: 2014-4-14 08:27
这里涉及到多态的自动向上转型问题。
17行代码: A a = get();
get()返回的类型实际是B类,但因B类实现了A接口,故B类是A接口的实现子类,可用多态方式进行定义。
这里要注意的是,进行多态定义时,定义的子类会自动转型为A接口类型,只能调用A接口中的方法,不能获取子类中的特有方法,必须进行向下转型,才能调用子类特有方法。
  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(((B)a).test());//进行向下转型,调用B类中的特有方法
  19.         }
  20. }
复制代码



作者: 恨天~无过…    时间: 2014-4-14 08:28
interface A{}
class B implements A
{
        public String test()
        {
                return "yes";
        }
}
class TestDemo
{
        static A get()
        {
                return new B();
        }
        public static void main(String[] args)
        {
                B a=new B();    //B类是A类的实现者,用B类来建一个对象,再用B的对象掉用A的的方法
                //A a = get();
                System.out.println(a.test());  
        }
}


说的不对,请多多指教,我也是新手!!

作者: 曹冬明    时间: 2014-4-14 09:22
A a = get();这一句对应的就是A a = new B();,多态忌讳的就是父类引用调用子类方法,必然产生异常
作者: zhangle    时间: 2014-4-14 13:32
谢谢大家啦




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