β€žΠ©Π΅ Π²ΠΈ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° Π·Π° Β« ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Β». Π’Π΅Π΄Π½ΡŠΠΆ ΠΊΠ°Π·Π°Ρ… Π·Π° тях, Π½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ ΡΡ‚ΡŠΠ»Π± Π½Π° ΡƒΡ‡Π΅Π½Π΅Ρ‚ΠΎ.β€œ

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° (видимостта), ΠΊΠΎΠΉΡ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ класовС ΠΈΠΌΠ°Ρ‚ Π΄ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° вашия клас. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ отговаря Π½Π° Π²ΡŠΠΏΡ€ΠΎΡΠ° β€žΠšΠΎΠΉ ΠΈΠΌΠ° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄/ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°?β€œ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° посочитС само Π΅Π΄ΠΈΠ½ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π° всСки ΠΌΠ΅Ρ‚ΠΎΠ΄ or ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°.

1) Β« ΠΏΡƒΠ±Π»ΠΈΡ‡Π΅Π½ Β» ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€.

ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, ΠΌΠ΅Ρ‚ΠΎΠ΄ or клас, ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ΠΈ с ΠΏΡƒΠ±Π»ΠΈΡ‡Π΅Π½ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ ΠΎΡ‚ всяко място Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°. Π’ΠΎΠ²Π° Π΅ Π½Π°ΠΉ-високата стСпСн Π½Π° откритост: няма ограничСния.

2) ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Β« частСн Β».

ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, ΠΌΠ΅Ρ‚ΠΎΠ΄ or клас, ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ΠΈ с частния ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ само Π² класа, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ са Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Π½ΠΈ. ΠœΠ°Ρ€ΠΊΠΈΡ€Π°Π½ΠΈΡΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ or ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π΅ скрит ΠΎΡ‚ всички Π΄Ρ€ΡƒΠ³ΠΈ класовС. Π’ΠΎΠ²Π° Π΅ Π½Π°ΠΉ-високата стСпСн Π½Π° повСритСлност: Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π° само ΠΎΡ‚ вашия клас. Π’Π°ΠΊΠΈΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π½Π΅ сС наслСдяват ΠΈ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΈ. ОсвСн Ρ‚ΠΎΠ²Π° Ρ‚Π΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π² наслСдствСн клас.

3)  Β« ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Β».

Ако Π΄Π°Π΄Π΅Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° or ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ Π΅ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ρ‚ΠΎΠ³Π°Π²Π° сС счита, Ρ‡Π΅ Π΅ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° "ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅". ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ с Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ са Π²ΠΈΠ΄ΠΈΠΌΠΈ Π·Π° всички класовС Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ са Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Π½ΠΈ, ΠΈ само Π·Π° Ρ‚Π΅Π·ΠΈ класовС. Π’ΠΎΠ·ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сС Π½Π°Ρ€ΠΈΡ‡Π° ΠΎΡ‰Π΅ " ΠΏΠ°ΠΊΠ΅Ρ‚ " or " частСн ΠΏΠ°ΠΊΠ΅Ρ‚ " Π΄ΠΎΡΡ‚ΡŠΠΏ, Π½Π°ΠΌΠ΅ΠΊΠ²Π°ΠΉΠΊΠΈ Π·Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΡŠΡ‚ Π΄ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Π·Π° цСлия ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° класа.

4) ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Β« Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ Β».

Π’ΠΎΠ²Π° Π½ΠΈΠ²ΠΎ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π° . ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, ΠΌΠ΅Ρ‚ΠΎΠ΄ or клас, ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ΠΈ със защитСния ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ ΠΎΡ‚ нСговия ΠΏΠ°ΠΊΠ΅Ρ‚ (ΠΊΠ°Ρ‚ΠΎ β€žΠΏΠ°ΠΊΠ΅Ρ‚β€œ) ΠΈ ΠΎΡ‚ всички наслСдСни класовС.

Π’Π°Π·ΠΈ table обяснява всичко:

Π’ΠΈΠΏ видимост ΠšΠ»ΡŽΡ‡ΠΎΠ²Π° Π΄ΡƒΠΌΠ° Π”ΠΎΡΡ‚ΡŠΠΏ
Ввоят клас Π’Π°ΡˆΠΈΡΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠŸΠΎΡ‚ΠΎΠΌΡŠΠΊ Всички класовС
Частно частСн Π΄Π° НС НС НС
ΠŸΠ°ΠΊΠ΅Ρ‚ (Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€) Π΄Π° Π΄Π° НС НС
Π—Π°Ρ‰ΠΈΡ‚Π΅Π½ Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ΠΈ Π΄Π° Π΄Π° Π΄Π° НС
ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½ ΠΏΡƒΠ±Π»ΠΈΡ‡Π΅Π½ Π΄Π° Π΄Π° Π΄Π° Π΄Π°

Има Π½Π°Ρ‡ΠΈΠ½ лСсно Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ Ρ‚Π°Π·ΠΈ table. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Ρ‚Π΅ си, Ρ‡Π΅ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π·Π°Π²Π΅Ρ‰Π°Π½ΠΈΠ΅. РаздСлятС всичкитС си Π½Π΅Ρ‰Π° Π½Π° Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ. Кой ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²Π°ΡˆΠΈΡ‚Π΅ Π½Π΅Ρ‰Π°?

Кой ΠΈΠΌΠ° Π΄ΠΎΡΡ‚ΡŠΠΏ ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠŸΡ€ΠΈΠΌΠ΅Ρ€
само  Π°Π· частСн Π›ΠΈΡ‡Π΅Π½ Π΄Π½Π΅Π²Π½ΠΈΠΊ
сСмСйство (Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€) Π‘Π΅ΠΌΠ΅ΠΉΠ½ΠΈ снимки
БСмСйство ΠΈ наслСдници Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ΠΈ Π‘Π΅ΠΌΠ΅ΠΉΠ½ΠΎ ΠΈΠΌΠ΅Π½ΠΈΠ΅
всички ΠΏΡƒΠ±Π»ΠΈΡ‡Π΅Π½ ΠΌΠ΅ΠΌΠΎΠ°Ρ€ΠΈ

β€žΠœΠ½ΠΎΠ³ΠΎ Π΅ ΠΊΠ°Ρ‚ΠΎ Π΄Π° си прСдставим, Ρ‡Π΅ класовСтС Π² Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ са част ΠΎΡ‚ Π΅Π΄Π½ΠΎ сСмСйство.β€œ

β€žΠ˜ΡΠΊΠ°ΠΌ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΄Π° Π²ΠΈ ΠΊΠ°ΠΆΠ° някои интСрСсни нюанси относно ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° отмяна.β€œ

1) НСявно ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° абстрактСн ΠΌΠ΅Ρ‚ΠΎΠ΄.

Π”Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ΠΌ, Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ слСдния code:

Код
class Cat
{
 public String getName()
 {
  return "Oscar";
 }
}

И Ρ€Π΅ΡˆΠΈΡ…Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ клас Tiger, ΠΊΠΎΠΉΡ‚ΠΎ наслСдява Ρ‚ΠΎΠ·ΠΈ клас, ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ интСрфСйс към новия клас

Код
class Cat
{
 public String getName()
 {
   return "Oscar";
 }
}
interface HasName
{
 String getName();
 int getWeight();
}
class Tiger extends Cat implements HasName
{
 public int getWeight()
 {
  return 115;
 }

}

Ако просто ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ всички липсващи ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ IntelliJ IDEA Π²ΠΈ ΠΊΠ°Π·Π²Π° Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅, ΠΏΠΎ-късно ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΊΠ°Ρ€Π°Ρ‚Π΅ дълго Π²Ρ€Π΅ΠΌΠ΅ Π² Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°.

Оказва сС, Ρ‡Π΅ ΠΊΠ»Π°ΡΡŠΡ‚ Tiger ΠΈΠΌΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ getName, наслСдСн ΠΎΡ‚ Cat, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС ΠΏΡ€ΠΈΠ΅Ρ‚ ΠΊΠ°Ρ‚ΠΎ имплСмСнтация Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getName Π·Π° интСрфСйса HasName.

β€” НС Π²ΠΈΠΆΠ΄Π°ΠΌ Π½ΠΈΡ‰ΠΎ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ Π² Ρ‚ΠΎΠ²Π°.

β€žΠΠ΅ Π΅ лошо, ΠΈΠΌΠ° вСроятност Π΄Π° сС ΠΏΡ€ΠΎΠΌΡŠΠΊΠ½Π°Ρ‚ Π³Ρ€Π΅ΡˆΠΊΠΈ.β€œ

Но ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΎΡ‰Π΅ ΠΏΠΎ-лошо:

Код
interface HasWeight
{
 int getValue();
}
interface HasSize
{
 int getValue();
}
class Tiger extends Cat implements HasWeight, HasSize
{
 public int getValue()
 {
  return 115;
 }
}

Оказва сС, Ρ‡Π΅ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° наслСдитС ΠΎΡ‚ мноТСство интСрфСйси. По-Ρ‚ΠΎΡ‡Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ наслСдитС, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ. Π’ΠΈΠΆΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. И Π΄Π²Π°Ρ‚Π° интСрфСйса изискват Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getValue(), Π½ΠΎ Π½Π΅ Π΅ ясно HowΠ²ΠΎ трябва Π΄Π° Π²ΡŠΡ€Π½Π΅: Ρ‚Π΅Π³Π»ΠΎΡ‚ΠΎ or Ρ€Π°Π·ΠΌΠ΅Ρ€Π°? Π’ΠΎΠ²Π° Π΅ доста нСприятно Π·Π° справянС.

β€žΠ‘ΡŠΠ³Π»Π°ΡΠ΅Π½ съм. Π˜ΡΠΊΠ°Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅. Π’Π΅Ρ‡Π΅ стС наслСдor ΠΌΠ΅Ρ‚ΠΎΠ΄ със ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅ ΠΎΡ‚ базовия клас. Π’ΠΎΠΉ Π΅ ΠΏΠΎΠ²Ρ€Π΅Π΄Π΅Π½.β€œ

β€” Но ΠΈΠΌΠ° Π΄ΠΎΠ±Ρ€ΠΈ Π½ΠΎΠ²ΠΈΠ½ΠΈ.

2) Π Π°Π·ΡˆΠΈΡ€ΡΠ²Π°Π½Π΅ Π½Π° видимостта. ΠšΠΎΠ³Π°Ρ‚ΠΎ наслСдитС Ρ‚ΠΈΠΏ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΡ‚Π΅ видимостта Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄. Π•Ρ‚ΠΎ How ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°:

Java code ОписаниС
class Cat
{
 protected String getName()
 {
  return "Oscar";
 }
}
class Tiger extends Cat
{
 public String getName()
 {
  return "Oscar Tiggerman";
 }
}
Π Π°Π·ΡˆΠΈΡ€ΠΈΡ…ΠΌΠ΅ видимостта Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΡ‚ protectedΠ½Π° public.
Код Π—Π°Ρ‰ΠΎ Ρ‚ΠΎΠ²Π° Π΅ β€žΠ·Π°ΠΊΠΎΠ½Π½ΠΎβ€œ
public static void main(String[] args)
{
 Cat cat = new Cat();
 cat.getName();
}
всичко Π΅ страхотно Π’ΡƒΠΊ Π΄ΠΎΡ€ΠΈ Π½Π΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Π΅ видимостта Π΅ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½Π° Π² клас наслСдник.
public static void main(String[] args)
{
 Tiger tiger = new Tiger();
 tiger.getName();
}
Π’ΡƒΠΊ Π½Π°Ρ€ΠΈΡ‡Π°ΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, чиято видимост Π΅ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½Π°.

Ако Ρ‚ΠΎΠ²Π° Π½Π΅ бСшС възмоТно, Π²ΠΈΠ½Π°Π³ΠΈ Π±ΠΈΡ…ΠΌΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π΄Π° Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°ΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Tiger:
public String getPublicName()
{
super.getName(); // ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° защитСния ΠΌΠ΅Ρ‚ΠΎΠ΄
}

Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ Π½Π° сигурността.

public static void main(String[] args)
{
 Cat catTiger = new Tiger();
 catTiger.getName();
}
Ако всички условия, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Π±Π°Π·ΠΎΠ² клас ( Cat ), са ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‚Π΅ със сигурност са изпълнСни Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π° наслСдствСния Ρ‚ΠΈΠΏ ( Tiger ). Въй ΠΊΠ°Ρ‚ΠΎ ограничСнията Π²ΡŠΡ€Ρ…Ρƒ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° бяха слаби, Π° Π½Π΅ силни.

β€žΠΠ΅ съм сигурСн, Ρ‡Π΅ Ρ€Π°Π·Π±Ρ€Π°Ρ… напълно, Π½ΠΎ Ρ‰Π΅ запомня, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ възмоТно.β€œ

3) БтСсняванС Π½Π° Ρ‚ΠΈΠΏΠ° Π²Ρ€ΡŠΡ‰Π°Π½Π΅.

Π’ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ Π²Ρ€ΡŠΡ‰Π°Π½ΠΈΡ Ρ‚ΠΈΠΏ Π½Π° стСснСн Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π΅Π½ Ρ‚ΠΈΠΏ.

Java code ОписаниС
class Cat
{
 public Cat parent;
 public Cat getMyParent()
 {
  return this.parent;
 }
 public void setMyParent(Cat cat)
 {
  this.parent = cat;
 }
}
class Tiger extends Cat
{
 public Tiger getMyParent()
 {
  return (Tiger) this.parent;
 }
}
ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ…ΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getMyParentΠΈ сСга Ρ‚ΠΎΠΉ Π²Ρ€ΡŠΡ‰Π° TigerΠΎΠ±Π΅ΠΊΡ‚.
Код Π—Π°Ρ‰ΠΎ Ρ‚ΠΎΠ²Π° Π΅ β€žΠ·Π°ΠΊΠΎΠ½Π½ΠΎβ€œ
public static void main(String[] args)
{
 Cat parent = new Cat();

 Cat me = new Cat();
 me.setMyParent(parent);
 Cat myParent = me.getMyParent();
}
всичко Π΅ страхотно Π’ΡƒΠΊ Π΄ΠΎΡ€ΠΈ Π½Π΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Π΅ Ρ‚ΠΈΠΏΡŠΡ‚ Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getMyParent Π΅ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ Π² класа наслСдник.

Как Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ «старият codeΒ».

public static void main(String[] args)
{
 Tiger parent = new Tiger();

 Tiger me = new Tiger();
 me.setMyParent(parent);
 Tiger myParent = me.getMyParent();
}
Π’ΡƒΠΊ ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ‡ΠΈΠΉΡ‚ΠΎ Ρ‚ΠΈΠΏ Π½Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π΅ стСснСн.

Ако Ρ‚ΠΎΠ²Π° Π½Π΅ бСшС възмоТно, Π²ΠΈΠ½Π°Π³ΠΈ Π±ΠΈΡ…ΠΌΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π΄Π° Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°ΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Tiger:
public Tiger getMyTigerParent()
{
return (Tiger) this.parent;
}

Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, няма Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Π½Π° сигурността ΠΈ/or Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Π½Π° Ρ‚ΠΈΠΏΠ° кастинг.

public static void main(String[] args)
{
 Tiger parent = new Tiger();

 Cat me = new Tiger();
 me.setMyParent(parent);
 Cat myParent = me.getMyParent();
}
И Ρ‚ΡƒΠΊ всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎΠ±Ρ€Π΅, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΡ…ΠΌΠ΅ Ρ‚ΠΈΠΏΠ° Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π΄ΠΎ базовия клас (Cat).

ΠŸΠΎΡ€Π°Π΄ΠΈ замяна сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° правилният ΠΌΠ΅Ρ‚ΠΎΠ΄ setMyParent.

И няма Π·Π° HowΠ²ΠΎ Π΄Π° сС притСсняватС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getMyParent , Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²ΡŠΡ€Π½Π°Ρ‚Π°Ρ‚Π° стойност, ΠΌΠ°ΠΊΠ°Ρ€ ΠΈ ΠΎΡ‚ класа Tiger, всС ΠΎΡ‰Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС присвоСна Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° myParent Π½Π° базовия клас (Cat) Π±Π΅Π· Π½ΠΈHowΠ²ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

ΠžΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Tiger ΠΌΠΎΠ³Π°Ρ‚ бСзопасно Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ HowΡ‚ΠΎ Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Tiger, Ρ‚Π°ΠΊΠ° ΠΈ Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Cat.

β€žΠ”Π°. Π Π°Π·Π±Ρ€Π°Ρ…. ΠšΠΎΠ³Π°Ρ‚ΠΎ замСнятС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, трябва Π΄Π° стС наясно How Ρ€Π°Π±ΠΎΡ‚ΠΈ всичко Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ ΠΏΡ€Π΅Π΄Π°Π²Π°ΠΌΠ΅ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π½Π° code, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° само базовия клас ΠΈ Π½Π΅ Π·Π½Π°Π΅ Π½ΠΈΡ‰ΠΎ Π·Π° нашия клас. β€œ

"Π’ΠΎΡ‡Π½ΠΎ! Π’ΠΎΠ³Π°Π²Π° голСмият Π²ΡŠΠΏΡ€ΠΎΡ Π΅ Π·Π°Ρ‰ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° стСсним Ρ‚ΠΈΠΏΠ° Π½Π° Π²Ρ€ΡŠΡ‰Π°Π½Π°Ρ‚Π° стойност, ΠΊΠΎΠ³Π°Ρ‚ΠΎ замСнямС ΠΌΠ΅Ρ‚ΠΎΠ΄?"

β€žΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Π΅, Ρ‡Π΅ Π² Ρ‚ΠΎΠ·ΠΈ случай codeΡŠΡ‚ Π² базовия клас Ρ‰Π΅ спрС Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ:β€œ

Java code ОбяснСниС Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°
class Cat
{
 public Cat parent;
 public Cat getMyParent()
 {
  return this.parent;
 }
 public void setMyParent(Cat cat)
 {
  this.parent = cat;
 }
}
class Tiger extends Cat
{
 public Object getMyParent()
 {
  if (this.parent != null)
   return this.parent;
  else
   return "I'm an orphan";
 }
}
ΠŸΡ€Π΅Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ…ΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getMyParent ΠΈ стСснихмС Ρ‚ΠΈΠΏΠ° Π½Π° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° Π²Ρ€ΡŠΡ‰Π°Π½Π° стойност.

Π’ΡƒΠΊ всичко Π΅ Π½Π°Ρ€Π΅Π΄.

public static void main(String[] args)
{
 Tiger parent = new Tiger();

 Cat me = new Tiger();
 Cat myParent = me.getMyParent();
}
Π’ΠΎΠ³Π°Π²Π° Ρ‚ΠΎΠ·ΠΈ code Ρ‰Π΅ спрС Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ.

ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ getMyParent ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡŠΡ€Π½Π΅ всяко ΠΊΠΎΠΏΠΈΠ΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ Tiger.

И нямамС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€Π΅Π΄ΠΈ Π·Π°Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Π΅ напълно възмоТно ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° myParent ΠΎΡ‚ Ρ‚ΠΈΠΏ Cat Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠ° към String.

β€žΠŸΡ€Π΅ΠΊΡ€Π°ΡΠ΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Амиго!β€œ

Π’ Java, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° бъдС ΠΈΠ·Π²ΠΈΠΊΠ°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄, няма ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄Π°Π»ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΡŠΡ‚ ΠΈΠΌΠ° Ρ‚Π°ΠΊΡŠΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄. Всички ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС. А [Ρ…ΠΈΠΏΠΎΡ‚Π΅Ρ‚ΠΈΡ‡Π½ΠΎ] ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° липсващ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π°ΠΉ-вСроятно Π±ΠΈ Π½Π°ΠΊΠ°Ρ€Π°Π»ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π΄Π° сС ΠΎΠΏΠΈΡ‚Π° Π΄Π° изпълни Π½Π΅ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ byte code. Π’ΠΎΠ²Π° Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Π±ΠΈ Π΄ΠΎΠ²Π΅Π»ΠΎ Π΄ΠΎ Ρ„Π°Ρ‚Π°Π»Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‰Π΅ Π·Π°Ρ‚Π²ΠΎΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°.

"Π£Π°Ρƒ. Π‘Π΅Π³Π° Π·Π½Π°ΠΌ."