Има ли някакъв начин да се извика публичната нестатична променлива или метод, без да се инстанцира нейният клас java...
Извикване на публична нестатична променлива или метод без инстанциране на неговия клас
Отговори (6)
В Java няма начин да се извикат нестатични променливи, т.е. членове на екземпляр без instance
.
Има причина за това, от Разбиране на членове на екземпляр и клас
Когато няколко обекта са създадени от един и същи план на клас, всеки от тях има свои собствени отделни копия на променливи на екземпляр.
Където като статични методи принадлежи към класа, а не към конкретния instance
Не, защото нарушава самата цел на статиката
Не, няма смисъл да се извиква променлива на екземпляр без екземпляр.
не е възможно, не можете да извиквате нестатични методи, без да създавате екземпляр. но ако не искате да създавате екземпляр и искате директно да извиквате, направете тези методи като статични
Имате нужда от обект, за да извиквате нестатични методи, но не е задължително да е обект от класа, където е дефиниран методът - може също да бъде обект от подклас на този клас.
Това може да бъде полезно, ако е трудно да се докоснете до обект от този клас - например ако неговият конструктор има параметри, които са трудни за получаване и не могат да бъдат нулирани, или ако трябва да създадете обекта от метод в друг обект, който е трудно да се получи сам. В тези случаи можете да разширите класа със свой собствен клас, който има по-лесен конструктор, да създадете обект от този подклас и да го извикате сами.
Имайте предвид, че този метод е хакерски и опасен и че нарушава основен принцип на ООП. Вашият подклас пропуска обичайната конструкция на класа, който разширява, и тъй като тази конструкция е толкова сложна (ако не беше, вие просто щяхте да я инстанциирате директно), можете да сте доста сигурни, че първоначалният процес на конструиране е важен и че някои - ако не повечето - от функционалността на този обект няма да работи правилно: хвърлете изключение, ако имате късмет, а ако имате по-малко късмет, това може да доведе до лоши резултати или дори да повреди други обекти. Дори ако този метод, от който се нуждаете, функционира правилно с този хак, възможно е бъдещи промени в този клас да направят този метод зависим от правилната конструкция и това ще развали кода ви.
Така че - използвайте на свой собствен риск!
public class MyNewClass extends ClassWithNonStaticMethod{
public MyNewClass(){
//Not doing proper construction
}
}
//somewhere in your code:
new MyNewClass().nonStaticMethod();
null
е правилният резултат - свойствата на обект, който не съществува, са нищо.
- person Idan Arye; 30.10.2013
За да отговоря на въпроса ви, не, не можете. Java не е проектирана да ви позволява да правите това.
Мисля обаче, че е по-важно да попитате: Защо смятате, че трябва да направите това?
Ако нямате контрол над този клас (т.е. това е библиотечен клас) и чувствате нужда да направите това, вероятно използвате библиотеката неправилно.
Ако можете да промените класа, направете го статичен.
static
? - person Luchian Grigore   schedule 30.10.2013