作者godfat (godfat 真常)
看板java
标题Re: [问题] 观念问题-多型和多载
时间Mon Mar 26 14:55:38 2007
※ 引述《adrianshum (Alien)》之铭言:
: 这只是在 Java 中的情况而已. 不要倒果为因.
: 要是喜欢的话, 我在 runtime 才决定 invoke
: 哪一个 overloaded 的 method 也无不可.
这我倒还是第一次听到 overloading 能在 runtime 决定,
pattern matching 吗?
http://en.wikipedia.org/wiki/Method_overloading
http://en.wikipedia.org/wiki/Pattern_matching
就我所知,overloading 一般是视为静态的多形:
http://en.wikipedia.org/wiki/Type_polymorphism#Ad-hoc_polymorphism
我想你所说的 overloaded method 可在 runtime 决定大概是指:
class Parent{
public void f(){}
public void f(int i){}
}
class Child extends Parent{
public void f(){}
public void f(int i){}
}
Parent p = getInstance();
p.f(); // 呼叫 Parent#f 或 Child#f
p.f(1); // 呼叫 Parent#f(int) 或 Child#f(int)
但这能叫 overloading 吗…?
p.f() 时决定是用 f() 系列而非使用 f(int) 系列
我觉得真的要 runtime 决定 overloading 的话,应该要像是:
class AClass{
public void f(1){}
public void f(0){}
public void f(int i){}
}
AClass ac = new AClass();
ac.f(1); // 呼叫 f(1)
ac.f(0); // 呼叫 f(0)
ac.f(2); // 呼叫 f(int)
ac.f( get_a_int() ); // 呼叫谁?
不觉得这样才有 runtime overloading 的感觉在?
: 先明白什麽叫 method overloading/overriding 吧.
: 不要用 "compile/runtime binding" 来判断, 那一点
: 意思都没有哩.
: alien
其实我并不喜欢 polymorphism 这个词,因为字面上太泛观了。
所以所谓 overriding 我会喜欢叫 dynamic/late binding,
他明确指出 binding 是在 runtime 决定,而非 compile time.
(而 overriding 则只拿来单指改写 parent 的动作罢了,
不过改写这个词也是过於随便就是了。)
我并不是想要正名或是什麽,只是越来越觉得,
如果只从 Java 的观点去看,世界会变得很小。
也想要强调,名词并不重要,只要不会造成混淆就好。
如果真的永远只用 Java 的话,或许也不会有所混淆。
那继续使用不会在 Java 混淆的名词,似乎也无不可。
但是,其他观点也是可以姑且听之吧 :p
--
#!/usr/bin/ruby [露比] /Programming (Kn|N)ight/ 看板《Ruby》
# if a
dog nailed
extra legs that
http://webptt.com/cn.aspx?n=bbs/Ruby/index.html
#
walks like an octopus, and Welcome ~
Ruby@ptt~
#
talks like an octopus, then
◢█◣ http://www.ruby-lang.org/
# we are happy to treat it as
█ http://www.ruby-doc.org/
# if it were
an octopus.
◥ ◤ http://www.rubyforge.org/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.58.12