Будьте осторожны с именами ваших методов! break
является ключевым словом и не должно использоваться в качестве имени метода.
Тогда вы определили
private void Move()
в вашем базовом классе FireFighter
=> в FireCaptain
нельзя сделать
public override void Move ()
- потому что это не
virtual
или abstract
, поэтому вы не можете использовать override
вообще.
- , даже если это так, вы не можете изменить область (от
private
до public
) в переопределении.
- и поскольку в вашем подклассе
private
, у вас даже нет доступа к вызову base.Move();
, поскольку он может быть вызван только самим реализующим классом.
So
To 2.) & 3.) Если вы хотите, чтобы оно было public
в подклассе, оно также должно быть public
уже в базовом классе. Или вы можете использовать protected
, так что только базовый класс и его наследники имеют доступ.
To 1.) Чтобы иметь возможность переопределить метод в вашем подклассе, он должен быть либо virtual
, либо abstract
. Так что сделай это
virtual
, если вы хотите иметь реализацию в базовом классе для определения поведения по умолчанию и сделать его только необязательным для его переопределения Например. как
// subclasses don't have to implement and override
// this method but can. Also the base.Move(); is optional
public virtual void Move()
{
Debug.Log("You might want to override this to implement a movement");
}
abstract
, если вы не хотите иметь реализацию в базовом классе и хотите заставить подклассы реализовать это, например. как
// subclasses will throw a compiler error if they
// do not implement this method
// (without base.Move(); since hte base has no implementation)
public abstract void Move();