class base{}
class childA extends base{}
class childB extends base{}
У меня есть две функции (перегружены)
как это:
function(childA,childA){}
function(childA,childB){}
// основная программа
base a = new childA();
base b = new childB();
function(a,b);
function(a,a); //problem
Вызовы функций не будут компилироваться явно.
Но есть ли способ получить тот же эффект без чрезмерного усложнения кода или проверки типов при каждом вызове функций.
Примечание: перегруженные функции не зависят от классов. Классы - это просто структуры данных, я бы предпочел, чтобы в них не было никакого взаимозависимого кода.
PS. Я пролистал немало тем, посвященных схожим проблемам, но, похоже, они не касаются проблем, упомянутых выше. Извините, если я что-то пропустил (новичок, первый пост и т. Д.)).
Редактировать:
Кажется, мой пример был немного расплывчатым, я просто хотел понять концепцию в целом, а не просто решение непосредственной проблемы. Кажется странным, что приведенный выше код не работает, был бы мощной функцией, если бы он работал.
Хорошо, другой пример, это почти то, что я пытаюсь сделать.
class Shape{}
class Rectangle extends Shape{
//rectangle data
}
class Circle extends Shape{
//circle data
}
перегруженные функции (члены другого класса)
boolean checkIntersection(Rectangle r, Circle c){}
boolean checkIntersection(Circle c, Circle c){}
// основная программа
Vector<Shape> shapes = new Vector<Shape>();
shapes.add(new Rectangle());
shapes.add(new Circle());
shapes.add(new Circle());
checkIntersection(shapes.get(0),shapes.get(1));
checkIntersection(shapes.get(1),shapes.get(2));