作者broodstare (交给C4就对了)
看板java
标题[问题] 多型的修饰词?
时间Fri Dec 27 11:27:26 2013
各位前辈好, 今天天气十分冷...大家要作好保暖
(小弟已经冷到key字都会抖了~~~)
最近在研究「多型」的概念,也爬了许多版上的文章,其中有一篇文章有一个程式
我有研究一下,但一直搞不太懂,程式码如下:
========================================================================
class Base2{
private void foo(){
System.out.println("Base2");
}
}
class Derived2 extends Base2{
public void foo(){
System.out.println("Derived2");
}
}
public class Practice {
static void basefoo(Base2 b){
b.foo();
●
}
static void derivefoo(Derived2 d){
d.foo();
}
public static void main(String[] args) {
basefoo(new Derived2());
derivefoo(new Derived2());
}
}
======================================================================
我想请问的观念是:
在main里,我将new Derived2()指派给了Base2 b,虽然原先class Base2里的method
foo 是设为private,但就多型来说,我应该也把Drived2的public method foo给了b
,理当b.foo()应该是可以执行的吧?
(ps. 红色的部份就是不能执行)
谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.110.189
※ 编辑: broodstare 来自: 140.115.110.189 (12/27 11:28)
1F:→ lovdkkkk:就多型来说, 是由 Base2 的观点来看你要执行的 function 12/27 12:04
2F:→ lovdkkkk:没有把 Drived2 的方法给 b (反向继承?) 这种事 @@ 12/27 12:05
3F:→ jej:这几个class的耦合性还是很高..不是学习泛型的好例子.. 12/27 12:37
4F:→ jej:你的疑问 只要单纯写一个 new Base2() 然後看看能不能foo() 12/27 12:39
5F:→ swpoker:要由上而下~而非由下而上 12/27 13:55
谢谢各位版大们回答!! (很抱歉因为今天下午忙碌,没法即时回应)
我想自己也有点混乱了,那我想再请问一些追加的相关问题:
Base2 b = new Derived2();
就这个范例,是个好的写法吗? 是因为super-class Base2 与sub-class Derived2
的method有所重叠(即便他们的modifier不同),导致这不是个很好例子?
所以要竟量避开这种写法吗?
谢谢Q___Q
※ 编辑: broodstare 来自: 140.115.5.114 (12/27 23:08)
6F:推 PsMonkey:B b = new D() 这没啥问题,很多时候都是这样用 12/28 00:33
7F:→ bleed1979:jej正解,原po连可视都还没搞懂。谈多型有点早了。 12/29 18:55