ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java

ΠšΠ»Π°ΡΡΡ‹, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

Java являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языком, поэтому Ρ‚Π°ΠΊΠΈΠ΅ понятия ΠΊΠ°ΠΊ «ΠΊΠ»Π°ΡΡ» ΠΈ «ΠΎΠ±ΡŠΠ΅ΠΊΡ‚» ΠΈΠ³Ρ€Π°ΡŽΡ‚ Π² Π½Π΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ. Π›ΡŽΠ±ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Java ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² классС Book ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Info, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ значСния этих ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

ΠšΡ€ΠΎΠΌΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² классах ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ конструкторами. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ Π½ΡƒΠΆΠ½Ρ‹ для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. НазваниС конструктора Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ класса :

Класс Book ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° конструктора. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² присваиваСт «Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅» Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния полям. Π’Ρ‚ΠΎΡ€ΠΎΠΉ конструктор присваиваСт полям класса значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ нСсколько конструкторов для установки Ρ€Π°Π·Π½ΠΎΠ³ΠΎ количСства ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ конструктор класса ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ :

Π’Ρ‹Π·ΠΎΠ² конструктора класса с двумя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ производится с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова this, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² скобках указываСтся список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π§Ρ‚ΠΎΠ±Ρ‹ нСпосрСдствСнно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠŸΡ€ΠΎΡ†Π΅ΡΡ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° двухступСнчатый: Π²Π½Π°Ρ‡Π°Π»Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ пСрСмСнная Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса, Π° Π·Π°Ρ‚Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова new ΠΈ конструктора нСпосрСдствСнно создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ объявлСнная пСрСмСнная :

ПослС объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Book b; эта пСрСмСнная Π΅Ρ‰Π΅ Π½Π΅ ссылаСтся Π½ΠΈ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null. Π—Π°Ρ‚Π΅ΠΌ создаСм нСпосрСдствСнно ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Book с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· конструкторов ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова new.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹

ΠšΡ€ΠΎΠΌΠ΅ конструктора Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π±Π»ΠΎΠΊΠΎΠΌ :

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса

ΠœΠ΅Ρ‚ΠΎΠ΄ класса Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ β€” это функция ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, принадлСТащая ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ классу ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.

Как ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΌΠ΅Ρ‚ΠΎΠ΄ состоит ΠΈΠ· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ количСства ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² для выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ дСйствия ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Π Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ простыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ :

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ интСрфСйс, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ осущСствляСтся доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ класса, Ρ‚Π΅ΠΌ самым, обСспСчивая ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ….

ΠšΡ€ΠΎΠΌΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Ρ‚Π΅Π»Π° (ΠΊΠΎΠ΄Π°) Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ ряд Π΄Ρ€ΡƒΠ³ΠΈΡ… характСристик:

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа. Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа прСдоставляСт Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚:

Π’Π°ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ интСрфСйсов позволяСт ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ интСрфСйс, Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π½Π°Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ static. Если этого Π½Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса (Π±ΡƒΠ΄Π΅Ρ‚ нСстатичСским).

Класс ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ main, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа public; ΠΊ Π½Π΅ΠΌΡƒ обращаСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰Π°ΡΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

Абстрактный класс, abstract class

Абстрактный класс Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ β€” Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ создания экзСмпляров. АбстрактныС классы Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ООП β€” ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. Абстрактный класс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ (ΠΈ Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ) абстрактныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ рСализуСтся для класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ описан, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ для Π΅Π³ΠΎ нСабстрактных ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€ абстрактного класса, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ Π΄Π²Π΅ абстрактныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Override

Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ReleasePrice, Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ свойства класса Price, «Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ» абстрактныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ «ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ» ΠΌΠ΅Ρ‚ΠΎΠ΄ с использованиСм Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Override :

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ класса Price ΠΌΠ΅Ρ‚ΠΎΠ΄ bonusPrice Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½, Ρ‚ΠΎ срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π΄Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ρ‚Π°ΠΊΠΆΠ΅ выдаст сообщСниС ΠΎΠ± ошибкС.

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², overload

Π‘ΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Π½Π°Π±ΠΎΡ€Π° Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² называСтся сигнатурой ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Java позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ сигнатурами. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² называСтся ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ. Какой ΠΈΠ· ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅, Java опрСдСляСт Π½Π° основС фактичСских ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ класса Test с трСмя ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ test :

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования класса Test:

Java рСкурсия

РСкурсиСй называСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ (функция), которая Π²Π½ΡƒΡ‚Ρ€ΠΈ своСго Ρ‚Π΅Π»Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сама сСбя.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ рСкурсивного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ n!, достаточно Π·Π½Π°Ρ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ собой (n-1)! ΠΈ n. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ описанный способ.

Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ рСкурсивный ΠΌΠ΅Ρ‚ΠΎΠ΄ вычисляСт Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ числа.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ n-ΠΎΠ΅ число Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ. Напомним, ΠΊΠ°ΠΊ выглядят ΠΏΠ΅Ρ€Π²Ρ‹Π΅ элСмСнты этого ряда: 1 1 2 3 5 8 13 …

БупСркласс Object

Π’ Java Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ супСркласс Object ΠΈ всС классы ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΅Π³ΠΎ подклассами. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ссылочная пСрСмСнная класса Object ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса. Π’Π°ΠΊ ΠΊΠ°ΠΊ массивы ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠΆΠ΅ классами, Ρ‚ΠΎ пСрСмСнная класса Object ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ ΠΈ Π½Π° любой массив.

Π£ класса Object Π΅ΡΡ‚ΡŒ нСсколько Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

ΠœΠ΅Ρ‚ΠΎΠ΄ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
Object clone()Ѐункция создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΎΡ‚ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ
boolean equals(Object object)Ѐункция опрСдСлСния равСнства Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ
void finalize()ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°; вызываСтся ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
Class getClass()Ѐункция опрСдСлСния класса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎ врСмя выполнСния
int hashCode()Ѐункция получСния Ρ…ΡΡˆ-ΠΊΠΎΠ΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
void notify()ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° возобновлСния выполнСния ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
void notifyAll()ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° возобновлСния выполнСния всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
String toString()Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку описания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
void wait()ОТиданиС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° выполнСния
void wait(long ms)ОТиданиС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° выполнСния
void wait(long ms, int nano)ОТиданиС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° выполнСния

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ getClass(), notify(), notifyAll(), wait() ΡΠ²Π»ΡΡŽΡ‚ΡΡ «Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ» (final) ΠΈ ΠΈΡ… нСльзя ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° принадлСТности класса instanceof

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ принадлСТности класса ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова instanceof. Иногда трСбуСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова instanceof. Π­Ρ‚ΠΎ логичСский ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ foo instanceof Foo истинно, Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ foo ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ классу Foo ΠΈΠ»ΠΈ Π΅Π³ΠΎ наслСднику, ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Foo (ΠΈΠ»ΠΈ, Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅, наслСдуСт класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСт Foo).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Ρ€Ρ‹Π±ΠΊΠ°ΠΌΠΈ. Допустим имССтся Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс Fish ΠΈ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ унаслСдованныС подклассы SaltwaterFish ΠΈ FreshwaterFish. НСобходимо ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, относится Π»ΠΈ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊ классу ΠΈΠ»ΠΈ подклассу ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ

Данная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΡƒΠ΄ΠΎΠ±Π½Π° Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях. Иногда приходится ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ класса ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ instanceof, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΊΠΎΠ΄Π°:

Π˜ΠΌΠΏΠΎΡ€Ρ‚ класса import

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ import сообщаСт компилятору Java, Π³Π΄Π΅ Π½Π°ΠΉΡ‚ΠΈ классы, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ссылаСтся ΠΊΠΎΠ΄. Π›ΡŽΠ±ΠΎΠΉ слоТный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ для выполнСния Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° позволяСт ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎ Π½ΠΈΡ… компилятору Java. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выглядит Ρ‚Π°ΠΊ:

Π—Π° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Имя класса Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΌ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ свой ΠΏΠ°ΠΊΠ΅Ρ‚. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС классы ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π°, послС ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ‘.*;’

IDE Eclipse ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚. ΠŸΡ€ΠΈ написании ΠΊΠΎΠ΄Π° Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ Eclipse ΠΌΠΎΠΆΠ½ΠΎ ввСсти имя класса, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠ°Ρ‚ΡŒ Ctrl+Shift+O. Eclipse опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ классы Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ добавляСт ΠΈΡ… автоматичСски. Если Eclipse Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π΄Π²Π° класса с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΎΠ½ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ с запросом, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ класс Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ.

БтатичСский ΠΈΠΌΠΏΠΎΡ€Ρ‚

БущСствуСт Π΅Ρ‰Ρ‘ статичСский ΠΈΠΌΠΏΠΎΡ€Ρ‚, примСняСмый для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° статичСских Ρ‡Π»Π΅Π½ΠΎΠ² класса ΠΈΠ»ΠΈ интСрфСйса. НапримСр, Π΅ΡΡ‚ΡŒ статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Math.pow(), Math.sqrt(). Для вычислСний слоТных Ρ„ΠΎΡ€ΠΌΡƒΠ» с использованиСм матСматичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΠ΄ становится ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, вычислим Π³ΠΈΠΏΠΎΡ‚Π΅Π½ΡƒΠ·Ρƒ.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π±Π΅Π· указания класса Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ статичСскиС. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π½Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° классов, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ПослС ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΡƒΠΆΠ΅ Π½Π΅Ρ‚ нСобходимости ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ имя класса.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ допустимый Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ всС статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса:

Π’ этом случаС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Но Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π² Android Π½Π΅ рСкомСндуСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС памяти.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

ΠšΠ»Π°ΡΡΡ‹

Java позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс Car (Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ) ΠΈΠ»ΠΈ Animal (ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅) ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ свойства. Для класса Car Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ свойства ΠΊΠ°ΠΊ Π΄Π²Π΅Ρ€ΠΈ, колёса, Π»ΠΎΠ±ΠΎΠ²ΠΎΠ΅ стСкло ΠΈ Ρ‚.Π΄. ИмСя класс Car, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ классы Π›Π΅Π³ΠΊΠΎΠ²ΡƒΡˆΠΊΠΈ, Π“Ρ€ΡƒΠ·ΠΎΠ²ΠΈΠΊΠΈ, Автобусы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ всС свойства класса Car, Π° Ρ‚Π°ΠΊΠΆΠ΅ свои собствСнныС свойства. Π£ класса Animal соотвСтствСнно ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ свойства Π›Π°ΠΏΡ‹, Π₯вост, Π° Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ наш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ класс Cat, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΅Ρ‰Ρ‘ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ свойство Усы. Π˜Π½Ρ‹ΠΌΠΈ словами, классы ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ свойства ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… классов. Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс называСтся супСрклассом. Π’Π½ΡƒΡ‚Ρ€ΠΈ классов ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Для объявлСния класса слуТит ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class. Вспомним ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ строчку ΠΊΠΎΠ΄Π° ΠΈΠ· Android-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

Упрощённая общая Ρ„ΠΎΡ€ΠΌΠ° для класса ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

Π’ Java принято Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° класса с большой Π±ΡƒΠΊΠ²Ρ‹. Π’ классС ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса (Π½Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°), Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ экзСмпляра ΠΈΠ»ΠΈ полями (fields). Код ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ класса.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Новый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (ΠΈΠ»ΠΈ экзСмпляр) создаётся ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ класса ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова new:

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ способ. ΠŸΡƒΡΡ‚ΡŒ вас Π½Π΅ удивляСт, Ρ‡Ρ‚ΠΎ приходится Π΄Π²Π°ΠΆΠ΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ слово Cat, ΠΎΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹ΠΉ смысл.

Если Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΏΡ€ΠΈ объявлСнии ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π² самом Π½Π°Ρ‡Π°Π»Π΅.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΊΠΎΠ΄ Cat barsik Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСт Π΅Π³ΠΎ Ρ‚ΠΈΠΏ. Он Π½Π΅ всСгда ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ класса.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΈΠΏ класса Π΄ΠΎΠΌΠ°ΡˆΠ½ΠΈΡ… Π»ΡŽΠ±ΠΈΠΌΡ†Π΅Π² Pet, Π° обращаСмся ΠΊ классу ΠΊΠΎΡ‚ΠΎΠ² Cat.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания класса Box (ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ° для ΠΊΠΎΡ‚Π°):

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Java автоматичСски присвоит ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. НапримСр, для int это Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0. Но Π½Π΅ всСгда значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚ Π² вашСм классС. Если Π²Ρ‹ создали ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для описания количСства Π»Π°ΠΏ Ρƒ ΠΊΠΎΡ‚Π°, Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ сразу ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 4. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ считаСтся Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ сразу ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ значСния полям класса, Π½Π΅ полагаясь Π½Π° систСму.

Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Box.java, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, описанный Π²Ρ‹ΡˆΠ΅. О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» для класса я Π½Π΅ Π±ΡƒΠ΄Ρƒ здСсь Ρ€Π°ΡΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ.

ΠšΡ€Π°ΡΠΈΠ²Π°Ρ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ ΠΊΠΎΡ€ΠΎΠ±ΠΎΡ‡ΠΊΠ°.

ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ catBox, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Π² ΠΊΠΎΠ΄Π΅ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, сразу Π·Π°ΠΉΠΌΡ‘Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ памяти Π½Π° устройствС. ΠŸΡ€ΠΈ этом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ собствСнныС ΠΊΠΎΠΏΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… экзСмпляра width, height, depth. Для доступа ΠΊ этим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΡ‡ΠΊΠ° (.). Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ width, Ρ‚ΠΎ послС создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄:

Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΡ‘ΠΌ ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ всС значСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ:

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТит собствСнныС ΠΊΠΎΠΏΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… экзСмпляра. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСсколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° основС класса Box ΠΈ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ значСния для Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ. ΠŸΡ€ΠΈ этом измСнСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… экзСмпляра ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ объявим Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Box:

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈΠ· Π΄Π²ΡƒΡ… строк ΠΊΠΎΠ΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, Ссли Π½Π΅Ρ‚ особых ΠΏΡ€ΠΈΡ‡ΠΈΠ½.

Когда ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово new ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ имя класса, Ρ‚ΠΎ послС ΠΈΠΌΠ΅Π½ΠΈ ставим ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° конструктор класса. О Π½ΠΈΡ… ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅.

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово final

ПолС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСно ΠΊΠ°ΠΊ final (Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅). Π­Ρ‚ΠΎ позволяСт ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ содСрТимого ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΏΠΎ сути, это становится константой. ЀинальноС ΠΏΠΎΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π²ΠΎ врСмя Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ объявлСния.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ FILE_OPEN Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½Π° Π±Ρ‹Π»Π° константой, Π±Π΅Π· риска измСнСния ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈΠ½ΡΡ‚ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ.

ΠšΡ€ΠΎΠΌΠ΅ ΠΏΠΎΠ»Π΅ΠΉ, final ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (прСпятствуСт измСнСнию Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°) ΠΈ Ρƒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (прСпятствуСт ΠΏΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡŽ Π΅ΠΉ значСния Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π°).

Π’Π°ΠΊΠΆΠ΅ слово final ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

Иногда трСбуСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова instanceof. Π­Ρ‚ΠΎ Π±ΡƒΠ»Π΅Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ foo instanceof Foo истинно, Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ foo ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ классу Foo ΠΈΠ»ΠΈ Π΅Π³ΠΎ наслСднику, ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Foo (ΠΈΠ»ΠΈ, Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅, наслСдуСт класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСт Foo).

Π’ΠΎΠ·ΡŒΠΌΡ‘ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с Ρ€Ρ‹Π±ΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ ΠΊΠΎΡ‚Π°ΠΌ Π½Π΅ ΠΏΠΎΠ½Π°ΡΠ»Ρ‹ΡˆΠΊΠ΅. ΠŸΡƒΡΡ‚ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс Fish ΠΈ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ унаслСдованныС подклассы SaltwaterFish ΠΈ FreshwaterFish. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, относится Π»ΠΈ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊ классу ΠΈΠ»ΠΈ подклассу ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ import сообщаСт компилятору Java, Π³Π΄Π΅ Π½Π°ΠΉΡ‚ΠΈ классы, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ссылаСтся ΠΊΠΎΠ΄. Π›ΡŽΠ±ΠΎΠΉ слоТный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ для выполнСния Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° позволяСт ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎ Π½ΠΈΡ… компилятору Java. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выглядит Ρ‚Π°ΠΊ:

Π’ Android Studio ΠΈΠΌΠΏΠΎΡ€Ρ‚ класса происходит автоматичСски ΠΏΡ€ΠΈ Π½Π°Π±ΠΎΡ€Π΅ ΠΊΠΎΠ΄Π°. Π’Π°ΠΊΠΆΠ΅ это срабатываСт ΠΈ ΠΏΡ€ΠΈ вставкС ΠΊΠΎΠ΄Π°. Если ΠΈΠΌΠ΅Π½Π° классов ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, Ρ‚ΠΎ студия ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΠΎΠΌΠΎΡ‰ΡŒ. Π’ΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса.

Π˜ΠΌΠΏΠΎΡ€Ρ‚ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° ΠΈΠΌΠ΅Π½ΠΈ класса. Π‘Π΅Π· ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ всС классы Π² ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ.

БтатичСский ΠΈΠΌΠΏΠΎΡ€Ρ‚

БущСствуСт Π΅Ρ‰Ρ‘ статичСский ΠΈΠΌΠΏΠΎΡ€Ρ‚, примСняСмый для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° статичСских Ρ‡Π»Π΅Π½ΠΎΠ² класса ΠΈΠ»ΠΈ интСрфСйса. Π­Ρ‚ΠΎ позволяСт ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ количСство ΠΊΠΎΠ΄Π°. НапримСр, Π΅ΡΡ‚ΡŒ статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Math.pow(), Math.sqrt(). Для вычислСний слоТных Ρ„ΠΎΡ€ΠΌΡƒΠ» с использованиСм матСматичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΠ΄ становится ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, вычислим Π³ΠΈΠΏΠΎΡ‚Π΅Π½ΡƒΠ·Ρƒ.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π±Π΅Π· указания класса Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ статичСскиС. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π½Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° классов, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ПослС ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΡƒΠΆΠ΅ Π½Π΅Ρ‚ нСобходимости ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ имя класса.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ допустимый Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ всС статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса:

Π’ этом случаС Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Но Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π² Android Π½Π΅ рСкомСндуСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС памяти.

Класс Class

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, класс Class Π·Π²ΡƒΡ‡ΠΈΡ‚ ΠΊΠ°ΠΊ «ΠΌΠ°ΡΠ»ΠΎ масляноС». Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, класс с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ сущСствуСт ΠΈ ΠΎΠ½ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ имя класса

Иногда ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ имя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ класса. Для этого Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ getClass().getName() ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ родствСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Допустим, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ имя класса ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

getSimpleName() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя класса Π±Π΅Π· ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ ΠΏΠΎΠ»Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.

Если Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ имя класса активности, Ρ‚ΠΎ достаточно ΠΊΠΎΠ΄Π°:

Если Π²Π°ΠΌ извСстно имя класса, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сам класс:

ΠœΠ΅Ρ‚ΠΎΠ΄ getSuperclass() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ имя супСркласса. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ нСсколько дСсятков ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ популярны.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Как ΠΈΠ· ΠΎΠ±Ρ‰Π΅Π³ΠΎ списка ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ элСмСнты ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса? ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚?

ΡΡƒΡ‚ΡŒ вопроса:
Π•ΡΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π² Π½Π΅ΠΉ хранятся ссылки Π½Π° элСмСнты класса ΠΈ Π΅Π³ΠΎ наслСдников (Π² этом ΠΊΠ»ΡŽΡ‡Π΅Π²Π°Ρ ΡΡƒΡ‚ΡŒ), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠ»Π»Ρ‹. ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΊΠΎΠ΄ для ясности:

ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ…, курсовых ΠΈ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚ здСсь.

Π£Π·Π½Π°Ρ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
class Base< >; class Child1:public Base< >; class Child2:public Base< >; class.

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’ΠΎΡ‚ допустим, Ρƒ.

Если Ρƒ вас ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° создаСтся Π²Π°ΠΌΠΈ ΠΆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ списки нСпосрСдствСнно Π²ΠΎ врСмя заполнСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· 12 ΠΌΠΈΠ½ΡƒΡ‚
Π’Π°ΠΊ ΠΆΠ΅ рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ элСмСнты ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡŽΠ½ΠΈΡ„ΠΎΡ€ΠΌΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ Π΄ΠΈΡΠΏΠ΅Ρ‚Ρ‡Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Visitor.

P.S. я ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π½Π΅ TC, Π½ΠΎ полагаю Ρƒ Π½Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ вопросы. И Π²ΠΎΠΎΠ±Ρ‰Π΅ цСлССсообразно Π»ΠΈ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ простого случая Ρ‚Π°ΠΊ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ Π·Π°ΠΏΠ°Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ?

Π²Π΅Ρ€Π½ΠΎ ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚Π΅. «Ρ Π½Π΅ волшСбник, я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡ‡ΡƒΡΡŒ» )

МоТно. ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ ΠΈ собирался. Но ΠΏΠΎΡ‚ΠΎΠΌ для порядка Π½Π°Ρ‡Π°Π» эти Π²Π΅Ρ‰ΠΈ ΠΎΠ±ΠΎΡΠ°Π±Π»ΠΈΠ²Π°Ρ‚ΡŒ. Π’ΠΈΠΏΠ° инкапсуляции. ΠœΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ заполняСт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ статичСский ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ½ эту ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ. Плюс Π² пСрспСктивС этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти списки. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ нСбольшой ΠΈΠ³Ρ€ΡƒΡˆΠΊΠ΅. Π•ΡΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдставлСно строкой String. ИмСнно ΠΎΠ½Π° пСрСдаСтся статичСскому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаст всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Box, Element, Elevator), Π·Π°ΠΊΠΈΠ½Π΅Ρ‚ ΠΈΡ… ссылки Π² Box[][], ΠΈ собствСнно Π΅Π³ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚.

Как я ΡƒΠΆΠ΅ сказал, Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ…ΠΈΡ‚Ρ€Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΅ΡΡ‚ΡŒ, Π½ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΡΡ‚Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… красивого, Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½ΠΎΠ³ΠΎ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ структурированного ΠΊΠΎΠ΄Π°, вСдь. я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡ‡ΡƒΡΡŒ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

JavaScript | Как ΡƒΠ·Π½Π°Ρ‚ΡŒ экзСмпляром ΠΊΠ°ΠΊΠΎΠ³ΠΎ класса являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚?

Π£ любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² JavaScript Π΅ΡΡ‚ΡŒ свойство constructor, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опрСдСляСт Π½Π°Π·Π²Π°Π½ΠΈΠ΅ класса ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π» создан Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. НапримСр:

Зная ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΌΡ‹ всСгда ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π² ΠΊΠ°ΠΊΠΎΠΌ конструкторС Π±Ρ‹Π» создан Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:

ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ javaΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½Π° классов-конструкторов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² β€” JavaScript

Нам Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ строки ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ свойству constructor. Π’ этих строках содСрТатся ΠΈΠΌΠ΅Π½Π° конструкторов классов, Ρ‡ΡŒΠΈΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠΌ являСтся наш ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠœΡ‹ всСгда ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎ Π΅Π³ΠΎ принадлСТности ΠΊ классу.

Π‘Π²ΠΎΠΉ класс ΠΈ Π΅Π³ΠΎ имя конструктора

Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ свой собствСнный класс Boltovnya :

Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр класса Boltovnya :

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π² консоли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства __proto__ :

ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ javaΠ‘Π²ΠΎΠΉ класс Boltovnya с конструктором β€” JavaScript

Π’ __proto__ Ρƒ нас Object

ΠžΠ±Ρ€Π°Ρ‰Π°Π΅ΠΌΡΡ ΠΊ свойству constructor Ρƒ Π½ΠΎΠ²ΠΎΠ³ΠΎ экзСмпляра:

ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ java. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ javaИмя конструктора ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ boltun β€” JavaScript

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ строку класса конструктора β€” Β« Boltovnya Β»

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ класс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°?

Для ΠΎΡ‚Π±ΠΎΡ€Π° ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… элСмСнтов трСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ условия принадлСТности ΠΊ классу. Π­Ρ‚ΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ, Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ массив ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ JavaScript | Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² массивС? ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ ΠΎΠ΄ΠΈΠ½ случай использования ΠΈΠΌΡ‘Π½ конструкторов классов Π² условии.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π£Π·Π½Π°Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Generic-класса Π² Java

Если Π²Ρ‹ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ часто ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π½Π° Java, Ρ‚ΠΎ этот Ρ‚ΠΎΠΏΠΈΠΊ скорСС всСго Π±ΡƒΠ΄Π΅Ρ‚ для вас бСсполСзСн. НС Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ πŸ™‚

НСдавно понадобилось Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ: ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½ generic-класс.

Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ сталкивался с ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, Ρ‚ΠΎ Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ сразу ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

public class AbstractEntityFactory extends Entity> <
public Class getEntityClass() <
return E. class ;
>
>

Π£Π²Ρ‹, IDE Π»ΠΈΠ±ΠΎ компилятор сразу ΡƒΠΊΠ°ΠΆΡƒΡ‚ Π²Π°ΠΌ Π½Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ (Β«cannot select from a type variableΒ» Π² стандартном компиляторС): » E. class » β€” Π½Π΅ являСтся допустимой конструкциСй. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС Π²ΠΎ врСмя исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… нашСго generic-класса ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΆΠ΅ ΠΈ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ такая конструкция Π² Java Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

ArrayList listOfNumbers = new ArrayList ();

Ρ‚ΠΎ ΠΈΠ·-Π·Π° стирания Ρ‚ΠΈΠΏΠΎΠ² ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ анализируя listOfNumbers ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это β€” ArrayList ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ Float, Π° Π½Π΅ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π΅Ρ‰Π΅. К соТалСнию Java Generics Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ πŸ™

НСуТСли ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… generic-классов ΠΏΡ€ΠΈ компиляции всСгда тСряСтся бСсслСдно ΠΈ Π½Π΅ сущСствуСт Π²ΠΎ врСмя выполнСния? НСт, сущСствуСт. Но Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ классС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ явно опрСдСляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² Π΅Π³ΠΎ generic-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅. Π’Ρ‹Π΄Π΅Π»ΠΈΠΌ исслСдуСмый класс:

public class FloatList extends ArrayList <>

ArrayList listOfNumbers = new FloatList ();

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ generic-класса, Ссли этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π±Ρ‹Π» Π·Π°Π΄Π°Π½ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСкции extends ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· наслСдников). ΠŸΡƒΡΡ‚ΡŒ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ опрСдСлСния Ρ‚ΠΈΠΏΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅, Π½ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях Π΄Π°ΠΆΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ β€” достаточно.

ВынСсСм всё Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:

public class ReflectionUtils <
public static Class getGenericParameterClass(Class actualClass, int parameterIndex) <
return (Class) ((ParameterizedType) actualClass.getGenericSuperclass()).getActualTypeArguments()[parameterIndex];
>
>

Всё, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠ΅Π½Π°! Или Π½Π΅Ρ‚.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ FloatList Π±ΡƒΠ΄Π΅Ρ‚ унаслСдован класс ExtendedFloatList? ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ actualClass.getGenericSuperclass() Π²Π΅Ρ€Π½Π΅Ρ‚ Π½Π°ΠΌ ΡƒΠΆΠ΅ Π½Π΅ Ρ‚ΠΎΡ‚ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π΄ΠΎ (FloatList вмСсто ExtendedFloatList). А Ссли иСрархия Π±ΡƒΠ΄Π΅Ρ‚ Π΅Ρ‰Π΅ слоТнСС? Наш ΠΌΠ΅Ρ‚ΠΎΠ΄ оказываСтся Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ Π³ΠΎΠ΄Π½Ρ‹ΠΌ. ΠžΠ±ΠΎΠ±Ρ‰ΠΈΠΌ Π½Π°ΡˆΡƒ Π·Π°Π΄Π°Ρ‡Ρƒ. ΠŸΡ€ΠΊΠ΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ такая иСрархия классов:

public class ReflectionUtilsTest extends TestCase <
// Π’ коммСнтариях ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ «Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅» ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

static class A <
// String, Integer
>

extends A <
// Integer, String, Set
>

static class C String >, Y, Z> extends B > <
// String, Double, Integer
>

ΠŸΡƒΡΡ‚ΡŒ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ· экзСмпляра класса E Π΄ΠΎΡΡ‚Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΎΠΊ B Π² качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° (Q) ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» класс String.

Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ измСнилось? Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ нСпосрСдствСнного родитСля, Π° Β«ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒΡΡΒ» ΠΏΠΎ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½Ρ‹ Π½Π΅ Π² блиТайшСм наслСдникС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ класса, Π° Β«Π½ΠΈΠΆΠ΅Β». Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, простой каст ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΊ Class ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ β€” сам ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ классом. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ всё это ΡƒΡ‡Π΅ΡΡ‚ΡŒβ€¦

import java.lang.reflect.GenericDeclaration;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.util.Stack;

/**
* Alex Tracer (c) 2009
*/
public class ReflectionUtils <

/**
* Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ класса опрСдСляСт ΠΊΠ°ΠΊΠΈΠΌ классом Π±Ρ‹Π» ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠΎΠ² с generic-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.
*
* @param actualClass Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ класс
* @param genericClass класс, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ опрСдСляСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°
* @param parameterIndex Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°
* @return класс, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ с индСксом parameterIndex Π² genericClass
*/
public static Class getGenericParameterClass(final Class actualClass, final Class genericClass, final int parameterIndex) <
// ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ссли genericClass Π½Π΅ являСтся ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ actualClass.
if (!genericClass.isAssignableFrom(actualClass.getSuperclass())) <
throw new IllegalArgumentException( «Class » + genericClass.getName() + » is not a superclass of »
+ actualClass.getName() + «.» );
>

genericClasses = new Stack

// НуТный класс Π½Π°ΠΉΠ΄Π΅Π½. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½.
Type result = genericClasses.pop().getActualTypeArguments()[parameterIndex];

// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ индСкс ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² Ρ‚ΠΎΠΌ классС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Π·Π°Π΄Π°Π½.
int actualArgumentIndex = getParameterTypeDeclarationIndex((TypeVariable) result);
// Π‘Π΅Ρ€Π΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ класс, содСрТащий ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ нашСм ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅.
ParameterizedType type = genericClasses.pop();
// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.
result = type.getActualTypeArguments()[actualArgumentIndex];
>

if (result instanceof TypeVariable) <
// ΠœΡ‹ ΡΠΏΡƒΡΡ‚ΠΈΠ»ΠΈΡΡŒ Π΄ΠΎ самого Π½ΠΈΠ·Π°, Π½ΠΎ Π΄Π°ΠΆΠ΅ Ρ‚Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ явного задания.
// Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·-Π·Π° «Type erasure» ΡƒΠ·Π½Π°Ρ‚ΡŒ класс для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
throw new IllegalStateException( «Unable to resolve type variable » + result + «.»
+ » Try to replace instances of parametrized class with its non-parameterized subtype.» );
>

if (result instanceof ParameterizedType) <
// Π‘Π°ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ оказался ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ.
// ΠžΡ‚Π±Ρ€ΠΎΡΠΈΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ…, ΠΎΠ½Π° Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Π°.
result = ((ParameterizedType) result).getRawType();
>

if (result == null ) <
// Should never happen. πŸ™‚
throw new IllegalStateException( «Unable to determine actual parameter type for »
+ actualClass.getName() + «.» );
>

return (Class) result;
>

public static int getParameterTypeDeclarationIndex(final TypeVariable typeVariable) <
GenericDeclaration genericDeclaration = typeVariable.getGenericDeclaration();

Π£Ρ…Ρ…, наш ΠΌΠ΅Ρ‚ΠΎΠ΄ Β«Π² ΠΎΠ΄Π½Ρƒ строчку» прСвратился Π² Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎΠ³ΠΎ монстра! πŸ™‚
НадСюсь ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ происходящСС πŸ˜‰

Π˜Ρ‚Π°ΠΊ, ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ наш Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ класс:

public class TopicFactory extends AbstractEntityFactory <
public void doSomething() <
Class entityClass = getEntityClass(); // Π’Π΅Ρ€Π½Π΅Ρ‚ Topic
>
>

На этом ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ всё. Бпасибо Ρ‡Ρ‚ΠΎ Π΄ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° πŸ™‚

Π­Ρ‚ΠΎ ΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ пост Π½Π° Π₯Π°Π±Ρ€Π΅. Π‘ΡƒΠ΄Ρƒ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ Π·Π° ΠΊΡ€ΠΈΡ‚ΠΈΠΊΡƒ, замСчания ΠΈ указания Π½Π° ошибки.

Upd: ΠΊΠΎΠ΄ исправлСн для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΡƒΡ‡Π΅Ρ‚Π° ситуации, ΠΊΠΎΠ³Π΄Π° Π³Π΄Π΅-Ρ‚ΠΎ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ присутствуСт Π½Π΅ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ класс.
Upd2: спасибо ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Power Π·Π° ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° ошибки.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *