当您从类继承时,这意味着派生类是继承的类。这意味着它具有完全相同的基本功能,可以扩展、覆盖等。如果派生类具有在父类中定义的方法没有意义,则意味着派生类不是它派生的类。
对于现实世界的示例,假设您有FlyingMachine
一个具有方法的类,Fly
并且Move
如果您从中派生类是不合逻辑Car
的,FlyingMachine
因为汽车不会飞,而AirPlane
从提到的基类派生类则完全没问题。但是,如果您有Machine
具有方法的基类Move
并且 car 是从该类派生的Car : Machine
(汽车是机器,对吗?),那将是合乎逻辑的,它也是机器,FlyingMachine
所以FlyingMachine : Machine
非常好,因为飞机是飞行机器AirPlane : FlyingMachine
是有道理的。
对于您给定的示例,这应该类似于:
abstract class VeryBaseClass {
public function MethodThatIsLogicalForEveryDerivedClass() {}
}
abstract class BaseClass extends VeryBaseClass {
public function SomeOtherFunctionThatMakesSenseOnlyForSomeClasses() {}
}
class ClassThatShouldNotHaveSpecificFunctionDefinedInBaseClass extends VeryBaseClass{}
class ClassThatShouldHaveSomeOtherMethod extends BaseClass {}
编辑:
如果有几个派生类需要的功能,但对于其中一些,它应该是公共的,而对于其中一些则不是。您应该在基类中将此方法定义为受保护的(派生类可以访问一个但不能从外部访问)。并且在要求该方法公开的派生类中创建另一个方法并调用父方法。例如:
abstract class Car { protected function Shift() {} }
class ManualCar extends Car {
public function Shift() { parent::Shift(); }
}
class AutomaticCar extends Car {
//Some implementation of automatic car that uses protected Shift method
}
小演示