在我看來,你是認爲當程序員聲明一個新的虛擬的可重寫的方法時,它的「抽象」,而不是。 「抽象方法」是新方法,但沒有代碼。
可能是你的意思,通過「抽象」,在父類中的方法,什麼都不做,無害,仍然被調用。這是一個不同的東西,不是一個抽象類,但仍然是一個有效的「模式」。
有時,在編寫類層次結構時,我聲明瞭一個全新的「抽象」方法,它沒有代碼,必須在子類中重新聲明,有時我聲明瞭一個全新的方法,但是,什麼都不做,仍然會被調用。
在類中,我也使用了「DoNothing」方法。
class Parent {
function doNothing() {
// does nothing, but don't remove me !!!
}
// im a new method, but, and Im abstract,
// I must be overriden in child classes
abstract function imVirtual();
// im a new method, but, Im NOT abstract,
// I don't need to be overriden, unless you want it
function imAlsoVirtual() {
deleteHardDriveWithoutAsking();
}
// im a new method, but, Im NOT abstract
function imVirtualAndHarmless() {
doNothing();
}
} // class Parent
class Child extends Parent {
// Im overriden from an abstract method
function imVirtual() {
$do = false;
}
// Im overriden from a non-abstract method
// Im also extending previous method
function imAlsoVirtual() {
if (askUserFirst()) {
parent::imAlsoVirtual();
}
}
// im a new method, but, Im NOT abstract
function imVirtualAndHarmless() {
parent::imVirtualAndHarmless();
sayHello();
}
// im a new method
function imNewShinnyMethod() {
sayGoodBye();
}
} // class Child
好的。我曾想過有兩個函數(具體()是抽象的),但只是想知道是否可能只有一個函數。 – andrewtweber 2011-06-14 14:53:18