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多态问题,求高手帮忙解答。
好啊
很好