黑马程序员技术交流社区

标题: 【求助】接口多态可以向下转型吗 [打印本页]

作者: 黑马_java猿    时间: 2014-8-13 18:41
标题: 【求助】接口多态可以向下转型吗
本帖最后由 黑马_java猿 于 2014-8-15 21:40 编辑
  1. interface A{
  2. }
  3. class B implements A
  4. {
  5.         public String test()
  6.         {
  7.                 return "yes";
  8.         }
  9. }
  10. class exam4
  11. {
  12.         static A get()
  13.         {
  14.                 return new B();
  15.         }
  16.         public static void main(String[] args)
  17.         {
  18.                 A a=get();
  19.                 if(A instanceof B)
  20.                 B b = (B)a; //此处运用是否恰当?,还是接口不具备向下转型的条件?
  21.                 System.out.println(a.test());
  22.         }
  23. }
复制代码

如上 这个B实现A   但是不能使用B的特有方法  除了在A中加个抽象方法,B b = (B)a; 这个可以吗?
作者: weity    时间: 2014-8-13 18:48
本帖最后由 weity 于 2014-8-13 19:02 编辑

首先接口是不能实例化的,A a是不行的,只有实现A的类才可以。所以也没有接口的实例向下转型的问题把A定义成抽象类,看看

  1. abstract class A{    //interface A{
  2. }

  3. class B extends A // implements A
  4. {
  5.         public String test()
  6.         {
  7.                 return "yes";
  8.         }
  9. }
  10. class exam4
  11. {
  12.         static A get()   //这个什么意思?
  13.         {
  14.                 return new B();
  15.         }
  16.         public static void main(String[] args)
  17.         {
  18.                 A a=get(); //啥意思。。。
  19.                 if(A instanceof B)//这个应该。。。。反了改为if(B instanceof A)
  20.                       B b = (B)a;
  21.                 System.out.println(a.test());
  22.         }
  23. }

复制代码



好吧,解到最后我凌乱了。。。向下转型应该是可以的吧,我好想看到过(String)obj,obj是Object类的一个对象~

作者: 复仇者联盟    时间: 2014-8-13 18:50
具备。你可以看一下毕老师的那个基础视频,那个讲的很清楚。




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