黑马程序员技术交流社区

标题: (已解决)引用变量的强制类型转换问题 [打印本页]

作者: 焦晨光    时间: 2012-8-3 09:00
标题: (已解决)引用变量的强制类型转换问题
本帖最后由 焦晨光 于 2012-8-3 16:12 编辑

问题已解决

java中,引用变量只能调用它编译时类型的方法,而不能调用它运行时类型的方法
问:编译时类型的方法和运行时类型的方法是什么意思,有什么区别?

如果要让这个引用变量调用它运行时的类型,则必须把它强制类型转换为运行时类型
问:怎么强制类型转换引用变量?

class BaseClass{
public int book=6;
public void base(){
  System.out.println("父类普通方法");
     }
public vodi test(){
  System.out.println("父类被覆盖的方法");
     }
}
public class SubClass extends BaseClass{
  public String book="简单的问题";
  public void test(){
   System.out.println("子类覆盖父类的方法");
      }
  public void sub(){
   System.out.println("子类普通方法");
     }
}


public static void main (String[] args){

BaseClass bc = new SubClass();
  System.out.println(bc.book);//这里为什么输出6
  bc.base();
  bc.test();//上面两次调用的方法,分别调用的是哪个方法?

}

作者: 贾昆    时间: 2012-8-3 10:43
楼主   具体问题具体分析  你可以贴个代码的
作者: 尤洋    时间: 2012-8-3 13:01
本帖最后由 尤洋 于 2012-8-3 13:03 编辑


你贴的代码中竟然还有  void写错这种错误,让人很无语啊{:soso_e140:}
点击图片 看清晰版
作者: 焦晨光    时间: 2012-8-3 15:37
尤洋 发表于 2012-8-3 13:01
你贴的代码中竟然还有  void写错这种错误,让人很无语啊
点击图片 看清晰版 ...

嘿嘿,多谢提醒,我是今天看书看到这里不懂了,就照着书上的代码打下来了,中间不小心打错了。
你回答的很详细,我已充分理解,谢谢i!~
作者: 张_涛    时间: 2012-8-3 15:50
焦晨光 发表于 2012-8-3 15:37
嘿嘿,多谢提醒,我是今天看书看到这里不懂了,就照着书上的代码打下来了,中间不小心打错了。
你回答的 ...

第一,当访问属性的时候,是从编译的角度看的,所以bc.book是6;当调用方法的时候,是从运行的角度看的,所以调用的是运行时类型所对应的方法
第二,当你的问题解决了,将帖子更改为已解决。
作者: 焦晨光    时间: 2012-8-3 16:05
问题已解决




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