Обучение и трудоустройство Java-программистов от Junior до Senior

Как узнать какой класс вызывает конструктор?

 
 
 
Сообщения:42
public class Queen extends Figure {
    Queen(int x, int y) {
        super(x, y);
    }
}


class Figure{

Figure(int x, int y){
//ничего прямолинейнее не смог вьідумать. Подскажите как правильно пользоваться наследованием в данном случае?

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
if stackTraceElements [2].getClassName().endsWith("Queen")) 

desk[x][y] = 9813; 
}
Изменен:13 сен 2017 17:43
 
 
Сообщения:1447
class Figure{ 
   Figure(int x, int y){
      String className = this.getClass().getSimpleName(); 
      System.out.println(className);
   }
}

но по вашему примеру видно что вы решаете задачу неверно, родитель не должен описывать поведение детей
 
 
Сообщения:42
loptop:
но по вашему примеру видно что вы решаете задачу неверно, родитель не должен описывать поведение детей

А для чего тогда родитель?
Мне нужно отображать фигуры. Они все отображаются одинаковым методом (ну в данном случае конструктором). Только родитель получает разные координаты и определяет кто именно хочет отобразиться. Я не спорю - более чем уверен, что так не правильно, просто не споткнувшись не пойму. По-этому даже не смотрю готовые решения.
Как правильно то?)
 
 
Сообщения:1447
В родителе можно объявить абстрактный метод который возвращает что надо отобразить.
В каждом ребенке объявить его, короле возвращает рисунок или символ королевы, пешка и остальные соответственно.
В методе отображения вызывайте этот абстрактный метод и рисуйте то что он вернет
 
 
Сообщения:725
все особенности поведения фигуры типа Queen должны быть описаны в классе Queen.
В классе Figure должны быть только свойства, общие всем фигурам.
Иначе зачем вообще разделять классы?
 
 
Сообщения:42
quote="rfq"]все особенности поведения фигуры типа Queen должны быть описаны в классе Queen.В классе Figure должны быть только свойства, общие всем фигурам.Иначе зачем вообще разделять классы?[/quote]


Отображение на доске в данном случае - общее для всег фигур поведение.
Отображаться именно символом королевы - особенность поведения Queen

Если я напишу следующий конструктор для отображения:

public class Queen extends Figure {
    Queen(int x, int y, int z)
        super(x, y, z);
    }
}


class Figure{
 
Figure(int x, int y, int z){

desk[x][y] = z; 
}


Так будет правильнее?
 
 
Сообщения:42
loptop:
В родителе можно объявить абстрактный метод который возвращает что надо отобразить.В каждом ребенке объявить его, короле возвращает рисунок или символ королевы, пешка и остальные соответственно.В методе отображения вызывайте этот абстрактный метод и рисуйте то что он вернет


public class Queen extends Figure {
    Queen(int x, int y) {
        super(x, y);
    }
char showFigure(){
return 9813;
}
}



abstract class Figure{
 
Figure(int x, int y){
//ничего прямолинейнее не смог вьідумать. Подскажите как правильно пользоваться наследованием в данном случае?
 
desk[x][y] = showFigure; 
}
abstract char showFigure();
}


Примерно так?
 
 
Сообщения:725
как я понял, z - это символ фигуры, для класса Queen он фиксирован, поэтому в конструктор Queen его передавать не надо:
public class Queen extends Figure {
    Queen(int x, int y)
        super(x, y, 9813);
    }
}
 
 
Сообщения:725
Hltr:
Примерно так?

ну или так.
 
 
Сообщения:42
rfq:
ну или так.


Спасибо.
 
Модераторы:frymock
Сейчас эту тему просматривают:Нет