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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马_java猿 中级黑马   /  2014-8-13 18:41  /  1071 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马_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; 这个可以吗?

2 个回复

倒序浏览
本帖最后由 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类的一个对象~
回复 使用道具 举报
具备。你可以看一下毕老师的那个基础视频,那个讲的很清楚。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马