一个面向对象的小问题

2011 年 11 月 29 日
 OnlyBlue
class A {
...
$this->foo();
...
}

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

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

public abstract public function foo() {}

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

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

这样就比较好了
yesmeck
2011 年 11 月 29 日
public abstract public function foo() {}
额,多了个public
yesmeck
2011 年 11 月 29 日
abstract public function foo();
擦,这么写一句居然这么多错误。。。。没IDE还写不了代码了。。。。
OnlyBlue
2011 年 11 月 29 日
@yesmeck abstract class能实例化吗?
freefcw
2011 年 11 月 29 日
虚类必然不能实例化。。。
yesmeck
2011 年 11 月 29 日
同上,不能。。

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

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

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

https://v2ex.xtra.eu.org/t/22445

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

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

© 2021 V2EX