Цель интерфейса - указать публичный API.Интерфейс не имеет состояния.Любые переменные, которые вы создаете, действительно являются константами (поэтому будьте осторожны при создании изменяемых объектов в интерфейсах).
По сути, интерфейс говорит, что здесь представлены все методы, которые класс, реализующий его, должен поддерживать.Вероятно, было бы лучше, если бы создатели Java не разрешали использование констант в интерфейсах, но уже слишком поздно избавляться от этого (и в некоторых случаях константы являются разумными в интерфейсах).
Поскольку выпросто указав, какие методы должны быть реализованы, нет понятия состояния (нет переменных экземпляра).Если вы хотите, чтобы у каждого класса была определенная переменная, вам нужно использовать абстрактный класс.
Наконец, вы, вообще говоря, не должны использовать публичные переменные, поэтому идея помещения переменных в интерфейс являетсяплохая идея для начала.
Краткий ответ - вы не можете делать то, что хотите, потому что это «неправильно» в Java.
Редактировать:
class Tile
implements Rectangle
{
private int height;
private int width;
@Override
public int getHeight() {
return height;
}
@Override
public int getWidth() {
return width;
}
@Override
public void setHeight(int h) {
height = h;
}
@Override
public void setWidth(int w) {
width = w;
}
}
альтернативная версия будет:
abstract class AbstractRectangle
implements Rectangle
{
private int height;
private int width;
@Override
public int getHeight() {
return height;
}
@Override
public int getWidth() {
return width;
}
@Override
public void setHeight(int h) {
height = h;
}
@Override
public void setWidth(int w) {
width = w;
}
}
class Tile
extends AbstractRectangle
{
}