interface FileOperationVisitorInterface
{
public function run();
public function execute();
public function toggleNextItem2();
}
abstract class AbstractFOVisitor implements FileOperationVisitorInterface
{
public function run()
{
}
public function execute()
{
}
public function toggleNextItem2()
{
}
}
// два наследующих класса
class CopyFileVisitor extends AbstractFOVisitor
{
public function run()
{
//тут какойто код
}
public function execute()
{
//тут какойто код
}
public function toggleNextItem2()
{
//тут какойто код
}
}
class MoveFileVisitor extends AbstractFOVisitor
{
public function run()
{
//тут какойто код
}
public function execute()
{
//тут какойто код
}
public function toggleNextItem2()
{
//тут какойто код
}
}
Есть одна проблема: все методы абстрактного и наследующих классов мне не надо указывать в public. Нужна инкапсуляция, тоесть private, хотя для полей вообще нужно protected…
Но если я их так обьявлю, то придеться и в интерфейсе так обьявить. Но если я и в интерфейсе так обьявлю, - то интерпретатор скажет что я - чмо, потомучто в спецификации так нельзя. Только модификаторы public.
Как быть? мне не помешало бы реализовывать наследования но в то же время и додержываться полиморфизма…. Потомучто наследующие методы обязательно должны реализовывать этих три метода, и одновременно наследоваться от абстрактного типа…
Какие приемы существуют?