У меня есть интерфейс. Один из моих методов принимает в качестве аргумента объект этого интерфейса. В зависимости от конкретного класса, я хочу построить другой объект.Как интерпретировать и использовать класс, заданный объектом интерфейса?
public interface Shape {
public void draw();
}
public class Circle implements Shape {
private int radius;
//constructor etc.
public void draw() {
System.out.println("CIRCLE!");
}
public int getRadius() {
return radius;
}
}
public class Square implements Shape {
private int side;
//constructor etc.
public void draw() {
System.out.println("SQUARE!");
}
public int getSide() {
return side;
}
}
public class MyClass {
public void myJob(Shape shape) {
if (shape.getClass().toString().equals("Circle")) {
// some missing code...what to do here? type cast? transform?
int radius = shape.getRadius();
}
}
}
Как принимать интерфейс Shape
, а затем получить radius
или side
из них, в зависимости от типа класса?
Какой вопрос? – tfosra
Вы должны изучить полиморфизм, чтобы решить вашу проблему, вместо того, чтобы пытаться применить к кругу или квадрату. –
Итак, вы хотите иметь дело с интерфейсом, а не с конкретным классом, чтобы абстрагировать любые детали реализации, а затем, когда вы фактически овладеете таким интерфейсом, вы настаиваете на том, чтобы точно знать, с каким объектом вы имеете дело, чтобы вы могли вызовите некоторый метод, который интерфейс не предлагает. Это совершенно бессмысленно. Вам будет лучше с несколькими методами myJob, каждый из которых будет иметь другой тип (круг, квадрат и т. Д.). –