Я столкнулся с подобным вопросом и просто хотел добавить то, на что я остановился. Мне понравился reindex_axis() method
для изменения порядка столбцов. Это сработало:
df = df.reindex_axis(['mean'] + list(df.columns[:-1]), axis=1)
Альтернативный метод, основанный на комментарии от @Jorge:
df = df.reindex(columns=['mean'] + list(df.columns[:-1]))
Хотя reindex_axis
кажется немного более быстрым в микро-тестах, чем reindex
, Я думаю, что я предпочитаю последнее за его прямоту.
Что вы должны сделать:
Добавить конструктор в ваш суперкласс:
public Superclass {
public SuperClass(String flavour) {
// super class constructor
this.flavour = flavour;
}
}
В классе Crisps:
public Crisps(String flavour, int quantity) {
super(flavour); // send flavour to the super class constructor
this.quantity = quantity;
}
& nbsp;
Комментарии
Некоторые комментарии к вашему вопросу:
«В суперклассе я инициализировал поле с помощью«
private String flavour;
не является инициализацией, это декларация. Инициализация - это когда вы устанавливаете значение.
«Я получаю сообщение об ошибке» имеет личный доступ в суперклассе », но я считаю, что это не имеет значения, поскольку я вызываю метод доступа, который возвращает его поле? "
Когда вы вызываете аксессуар (aka getter), это нормально - зависит от видимости геттера. Проблема в вашем коде:
this.flavour =
, потому что аромат не является полем, объявленным в классе Crisps, но в классе ужина, поэтому вы не можете делать прямой доступ. вы должны использовать мое предложение или объявить сеттера в суперклассе:
public void setFlavour(String flavour) {
this.flavour = flavour;
}
Затем вы можете использовать его в дочернем классе:
public Crisps(String flavour, int quantity) {
this.quantity = quantity;
super.setFlavour(flavour);
}
сделать
private String flavour;
общедоступным, иначе ваши подклассы не будут иметь доступ к этой строке. Ваш суперкласс не знает о существовании какого-либо подкласса. Согласно документации Java, «private» делает любую переменную и метод доступными в этом классе, где была объявлена приватная переменная или метод, ни один класс не имеет к ней доступа, даже подклассы. После того, как вы воспользуетесь модификатором доступа, вы не получите никаких ошибок.
flavour
является закрытым. Хотя вы читаете его из общедоступного метода, вы назначаете его частному полю и, скорее всего, не объявляете его в этом классе.
Вы можете настроить вкус protected
в родительском классе или определить для него сеттер
. В конечном итоге ваш код на самом деле не имеет смысла. Даже если бы он скомпилировался, это было бы более или менее: flavour = flavour
. Возможно, вам стоит пересмотреть то, что вы пытаетесь сделать немного
. Мне кажется, вам может понадобиться более пристальное понимание Java и объектно-ориентированного программирования.
http: // docs.oracle.com/javase/tutorial/java/concepts/
Вы должны начать здесь.
getFlavour
делает как раз это. Он получает flavour
. Вы не можете использовать это, чтобы присвоить значение вкусу. Если он возвращает изменчивый объект, вы можете изменить фактический вкус, но в этом случае строки являются неизменными.
– Cruncher
11 October 2013 в 21:08
crisps
есть параметр flavour
, но вы ничего не делаете с ним, так как ваш код в настоящее время написан.
– ajb
11 October 2013 в 21:09
super.setFlavour(super.getFlavour());
Конечно, сейчас это выглядит довольно забавно.
– Cruncher
11 October 2013 в 21:12
public crisps(String flavour, int quantity)
{
super(flavour);
this.quantity = quantity;
}
Это должно работать как , см. Документы