Я обдумываю, лучше ли иметь два указателя, по одному для каждого подкласса объекта и супер, или просто использовать приведение.
Сколько системных ресурсов при этом использует:
objectName.functionOne();
((SubClass) objectName).functionOther();
Это лучше, чем:
SuperClass objectA = (SuperClass) getSameInstance();
SubClass objectB = getSameInstance();
objectA.functionOne();
objectB.functionOther();
По сути, мой главный вопрос касается ресурсов, используемых при приведении типов, а не создания дополнительного указателя. Похоже, я мог бы сохранить несколько строк, например:
((SubClass) objectName).functionOther();
Однако стоит ли оно того?
Спасибо,
Грэ
ОБНОВИТЬ:
В моем вопросе были некоторые неясные моменты. По сути, у меня есть суперкласс, который я использую в большой функции. Он работает с тремя подклассами. Какой-то суперкласс работает как хотелось бы. Однако я столкнулся с препятствием в нескольких местах, где мне пришлось использовать функцию одного из трех различных подклассов; функция, которая находится только в одном из подклассов.
Я мог бы просто:
SuperClass instanceRef;
SubClass instanceRef2;
instanceRef.etc()
instanceRef.etc2()
instanceRef.etc3()
instanceRef2.specialSubClassOnlyCall();
instanceRef2.specialSubClassOnlyCall2();
или я мог бы:
SuperClass instanceRef;
instanceRef.etc()
instanceRef.etc2()
instanceRef.etc3()
((SpecialSubClass)instanceRef).specialSubClassOnlyCall();
((SpecialSubClass)instanceRef).specialSubClassOnlyCall2();
Однако я не знаю, что более эффективно.
ОБНОВЛЕНИЕ 2:
Вот пример, чтобы показать вам, о чем я говорю:
class Shape
Triangle extends Shape
Square extends Shape
Circle extends Shape
Cube extends Shape
Пример с двумя указателями: (Обратной стороной является дополнительный указатель.)
Shape pointer1 = (Shape) getSomeRandomShape();
Cube pointer2 = null;
pointer1.getWidth();
pointer1.getHeight();
pointer1.generalShapeProp();
pointer1.generalShapeProp2();
pointer1.generalShapeProp3();
if(sure_its_cube)
{
pointer2 = (Cube) pointer1;
pointer2.getZAxis();
pointer2.getOtherCubeOnlyThing();
pointer2.getOtherCubeOnlyThing2();
pointer2.getOtherCubeOnlyThing3();
pointer2.getOtherCubeOnlyThing4();
}
Или я мог сделать это так. (Даунсайд куча кастингов.)
Shape pointer1 = (Shape) getSomeRandomShape();
pointer1.getWidth();
pointer1.getHeight();
pointer1.generalShapeProp();
pointer1.generalShapeProp2();
pointer1.generalShapeProp3();
if(sure_its_cube)
{
((Cube)pointer1).getZAxis();
((Cube)pointer1).getOtherCubeOnlyThing();
((Cube)pointer1).getOtherCubeOnlyThing2();
((Cube)pointer1).getOtherCubeOnlyThing3();
((Cube)pointer1).getOtherCubeOnlyThing4();
}
Так что, пять приведений хуже одного лишнего указателя? Что это было шесть забросов или 20? На одно приведение хуже, чем указатель.
Грэ