Я подумываю, лучше ли иметь два указателя, по одному для каждого подкласса объекта и супер, или я должен просто использовать приведение.
Сколько системных ресурсов это использует:
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?Разве один бросок хуже, чем указатель.
Грей