站内搜索: 请输入搜索关键词

当前页面: JAVA 编程资料牛鼻论坛Java & J2SE 技术区→JAVA多态, 静态 绑定 and 动态绑定

JAVA多态, 静态 绑定 and 动态绑定

发表新主题   回复此主题

第1楼 2005-11-26 08:18 anlace0621 写道:

JAVA多态, 静态 绑定 and 动态绑定


public class Base{
  
  public int i = 10;
  
  public Base()
  {
    System.out.println("Base");
  }
  
  public void fun()
  {
    System.out.println("This is Base" + " " + i);
  }
}
public class Sub extends Base{
  
  public int i = 20;
  
  public Sub()
  {
    System.out.println("Sub");
  }
  
  public void fun()
  {
    System.out.println("This is Sub" + " " + i);
  }
}
public class Main{
  
  public static void main(String[] args)
  {
    Base[] b = {new Base(),new Sub()};

    b[0].fun(); //父类引用指向父类对象
    b[1].fun(); //父类引用指向子类对象
    
    b[1] = (Base)b[1]; //合法强转,子类可以强转为父类
    
    b[1].fun(); //但仍调用子类方法
    
    System.out.println(b[1].i); //这里将调用父类的i

    //问题-经过类型强制转换后,为什么方法调用子类,而
变量却仍然调用父类?????
    
    
  }
  
}

问题-经过类型强制转换后,为什么方法调用子类,而变量却仍然调用父类?????


第2楼 2013-08-31 12:44 Robot :

JAVA多态, 静态 绑定 and 动态绑定 相关


第3楼 2005-11-26 08:22 ranchgirl 写道:

Re:JAVA多态问题,求高手帮忙解答。


变量 is static bound (decided) at compile time
Non static method is dynamically bound (decided) at runtime.


第4楼 2005-11-26 08:24 anlace0621 写道:

Re:JAVA多态问题,求高手帮忙解答。


?????斑竹大人,我英文不好,看不懂您说的。。。。。


第5楼 2005-11-26 08:28 ranchgirl 写道:

Re:JAVA多态问题,求高手帮忙解答。


In theory of programming languages, there is a deep explanation for this. Variables must be bound at compile time.

However, I think remembering the fact is much more important than knowing why...


第6楼 2005-11-26 08:29 ranchgirl 写道:

Re:JAVA多态问题,求高手帮忙解答。


引用原文:
anlace0621 wrote:
?????斑竹大人,我英文不好,看不懂您说的。。。。。



Use a dictionary, or ignore my posts!
Your choices, please!

Thanks!


第7楼 2005-11-26 08:53 ranchgirl 写道:

Re:JAVA多态问题,求高手帮忙解答。


http://www.tigernt.com/

English-Chinese Online Dictionary
Chinese-English Online Dictionary


第8楼 2005-12-01 03:55 gason 写道:

Re:JAVA多态问题,求高手帮忙解答。


引用原文:
ranchgirl wrote:
变量 is static bound (decided) at compile time
Non static method is dynamically bound (decided) at runtime.


这也叫英文?!这“中国英语“也看不懂?!
变量 是 静态 绑定 的 (确定 的) 在 完成 时候
没有 静态 函数 是 动态 绑定 (确定) 在 运行时


第9楼 2005-12-01 04:51 liyan1234_ 写道:

Re:JAVA多态问题,求高手帮忙解答。


这个问题,回答的根本就不对,变量i也不是static的 和静态有什么关系
我觉得正常应该是b「1」.i为20 这可能是sun的一个缺陷吧

b[1] = (Base)b[1]; 没有意义,只有父类转化为子类时,才需要强转


第10楼 2005-12-01 17:56 littlesmile 写道:

Re:JAVA多态问题,求高手帮忙解答。


斑竹并没有说错。
她说的static和i是不是静态的无关。
意思是说 变量是在编译的时候静态(没运行就是静态,非关键字static)绑定的。编译的时候按照声明来检查。
方法是动态绑定的,意思是,运行时调用的方法都是子类的。

或者这样说:
初始化的工作是在运行之前做的,由此b[1]的属性就由Base中定义的i进行了初始化,
但是,调用方法是运行时的事,由于子类重写了父类的方法而引起了多态,所以,在执行时,会去调用子类的方法。


第11楼 2005-12-01 20:46 ranchgirl 写道:

Re:JAVA多态问题,求高手帮忙解答。


引用原文:
gason wrote:
这也叫英文?!这“中国英语“也看不懂?!
变量 是 静态 绑定 的 (确定 的) 在 完成 时候
没有 静态 函数 是 动态 绑定 (确定) 在 运行时



Thanks for your help!

Sorry, I need to make a little change on your translation.

变量 是 静态 绑定 的 (做决定 ) 在 编译 时候
没有 静态 函数 是 动态 绑定 (做决定 ) 在 运行时

Please do NOT translate my “中国英语“ into wrong Chinese!

Thanks!


第12楼 2005-12-01 20:49 ranchgirl 写道:

Re:JAVA多态问题,求高手帮忙解答。


引用原文:
littlesmile wrote:
斑竹并没有说错。
她说的static和i是不是静态的无关。
意思是说 变量是在编译的时候静态(没运行就是静态,非关键字static)绑定的。编译的时候按照声明来检查。
方法是动态绑定的,意思是,运行时调用的方法都是子类的。

或者这样说:
初始化的工作是在运行之前做的,由此b[1]的属性就由Base中定义的i进行了初始化,
但是,调用方法是运行时的事,由于子类重写了父类的方法而引起了多态,所以,在执行时,会去调用子类的方法。



Excellent explanation!!!!!
Thanks!


第13楼 2005-12-02 02:57 gason 写道:

Re:JAVA多态, 静态 绑定 and 动态绑定


谢天谢地,在我考CET6的时候没有这样的题目,要不我估计我是没指望过了


第14楼 2005-12-02 04:40 liyan1234_ 写道:

Re:JAVA多态, 静态 绑定 and 动态绑定


知道了
谢谢
看来我还的虚心学习
呵呵


第15楼 2006-02-23 07:01 antony 写道:

Re:JAVA多态, 静态 绑定 and 动态绑定


简化一下,你用多态,如果用到了FILED字段,那就是父类的,调用方法时,如果子类重写了父类的方法就会调用子类的方法,如果没有就调用父类的方法。


第16楼 2007-04-02 00:39 xiaxiaorui2003 写道:

Re:JAVA多态问题,求高手帮忙解答。


hehe!
跟着斑竹大人不光可以学JAVA,
还可以把英语学好!
一举多得啊!


第17楼 2007-04-02 19:54 gqxwolf 写道:

Re: JAVA多态, 静态 绑定 and 动态绑定


我才学java没多久哈 我想问哈
Base[] b = {new Base(),new Sub()};
是干什么的哈
还有就是下面的
b[0].fun();
b[1].fun();
具体是实现什么的哈
谢谢


第18楼 2007-05-01 14:27 yutuer 写道:

Re: JAVA多态, 静态 绑定 and 动态绑定


这就是多态啊,自己看看就知道了


第19楼 2007-05-02 06:01 kk15378924 写道:

Re: JAVA多态, 静态 绑定 and 动态绑定


偶的理解没有像斑竹大人那样用概念去细致化说明....
我个人的认为是变量在运行时是静态的,而这里采用了extends,方法fun()被覆盖掉了.所以再调用就是子类的方法.
而i是静态的,运行时,是无法被子类所覆盖.从而调用就成父类的数值了.
不知道这么理解错误否.请指教,Thx


第20楼 2007-06-12 19:57 guduwuhen1 写道:

Re:JAVA多态问题,求高手帮忙解答。


好啊
很好


发表新主题   回复此主题