一个面向对象的小问题

2011-11-29 20:43:44 +08:00
 OnlyBlue
class A {
...
$this->foo();
...
}

class B extends A {
...
function foo(){
...
}
...
}

就是说父类的对象可以调用子类中的方法吗?
4972 次点击
所在节点    PHP
16 条回复
francis
2011-11-29 20:45:06 +08:00
怎么可能?
frittle
2011-11-29 21:16:03 +08:00
不可以。子类可以调用父类中的方法,把$this->foot(); 和 function foo() {} 的位置对调就成立了。
OnlyBlue
2011-11-29 21:50:42 +08:00
@frittle 这个我知道,我就是想知道这样行不行,呵呵。
Ricepig
2011-11-29 21:52:15 +08:00
但是如果父类里有这个纯虚函数呢?这样就行了吗?
yesmeck
2011-11-29 22:04:57 +08:00
abstruct class A {

public abstract public function foo() {}

...
$this->foo();
...
}

class B extends A {
...
function foo(){
...
}
...
}

这样就比较好了
yesmeck
2011-11-29 22:05:47 +08:00
public abstract public function foo() {}
额,多了个public
yesmeck
2011-11-29 22:12:33 +08:00
abstract public function foo();
擦,这么写一句居然这么多错误。。。。没IDE还写不了代码了。。。。
OnlyBlue
2011-11-29 22:21:31 +08:00
@yesmeck abstract class能实例化吗?
freefcw
2011-11-29 22:49:25 +08:00
虚类必然不能实例化。。。
yesmeck
2011-11-29 23:05:40 +08:00
同上,不能。。

你们叫虚类感觉怪怪的。。。。
yesmeck
2011-11-29 23:08:30 +08:00
还有虚函数。。。。
OnlyBlue
2011-11-30 11:03:59 +08:00
@yesmeck 多谢,明白了。还有一个错误,abstruct,呵呵。
darasion
2011-11-30 11:12:59 +08:00
就是说父类对象不能调用子类中定义的方法。
父类中定义的方法可以调用子类对象的方法。

好像挺拗口。
phay
2011-11-30 11:29:10 +08:00
如果你要实现的是template pattern。。当然是可以的,只不过静态语言要绕一点(比如区分virutal abstract之类的东西)动态语言一般不需要,比如python,直接像你那样写就行了
laihj
2011-11-30 11:57:40 +08:00
不太懂PHP的语法
如果$this实例的话,在运行中它本身就是class B吧,只不过代码写在A中而已
OnlyBlue
2011-11-30 13:05:51 +08:00
@darasion 拗口没事,容我慢慢消化。
@phay 我先学习一下template pattern,静态语言,动态语言等概念
@laihj 没看懂,我再仔细琢磨一下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/22445

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX