Это противоречит
LSP.
Вот представьте, вам дали такую возможность и вы переопределили метод с новыми параметрами. Теперь у нас есть метод, который принимает Layer или даже ICreatable. Допустим так:
void DoSomething (ICreatable layer) {
layer.Create();
}
Но мы ведь можем передать потомка в этот метод! Делаем следующее и ломаем наш код:
DoSomething(new PerlinNoiseLayer())
Потому именно в таком виде - нет, нельзя.
Для генерации каждого слоя нужен разный набор параметров и генерируются они, соответственно, по-разному
Ну вот у вас есть разница - вот и отобразите её в своем коде.
Это слой? - Да. - Ок, тогда посмотрим его высоты.
Если есть такая необходимость - почему бы не ввести отдельный интерфейс для высот?
void DoSomething (IHasHeights layer) {
layer.Heights; // <== тут есть высоты
}
Почему бы не воспользоваться фабрикой или билдером? Или даже заставить передавать все эти параметры в конструктор?
public abstract class Layer: ICreatable
{
float[,] Heights { get; set; }
public abstract void Create();
}
public class PerlinNoiseLayer : Layer
{
private float[,] _heights;
readonly int _resolution ;
public PerlinNoiseLayer (int resolution) {
_resolution = resolution;
}
public override void Create()
{
// тут расширение уже есть
}
}