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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 焦晨光 中级黑马   /  2012-8-3 09:00  /  2394 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 焦晨光 于 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();//上面两次调用的方法,分别调用的是哪个方法?

}

5 个回复

正序浏览
问题已解决
回复 使用道具 举报
焦晨光 发表于 2012-8-3 15:37
嘿嘿,多谢提醒,我是今天看书看到这里不懂了,就照着书上的代码打下来了,中间不小心打错了。
你回答的 ...

第一,当访问属性的时候,是从编译的角度看的,所以bc.book是6;当调用方法的时候,是从运行的角度看的,所以调用的是运行时类型所对应的方法
第二,当你的问题解决了,将帖子更改为已解决。
回复 使用道具 举报
尤洋 发表于 2012-8-3 13:01
你贴的代码中竟然还有  void写错这种错误,让人很无语啊
点击图片 看清晰版 ...

嘿嘿,多谢提醒,我是今天看书看到这里不懂了,就照着书上的代码打下来了,中间不小心打错了。
你回答的很详细,我已充分理解,谢谢i!~
回复 使用道具 举报
本帖最后由 尤洋 于 2012-8-3 13:03 编辑


你贴的代码中竟然还有  void写错这种错误,让人很无语啊{:soso_e140:}
点击图片 看清晰版

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主   具体问题具体分析  你可以贴个代码的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马