Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° JavaΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 36

Автор Н.А. Вязовик

if (x<=0 || y<=0) {

return;

// Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅

// значСния, Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

}

... // основныС вычислСния

}


Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ return (с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΈΠ»ΠΈ Π±Π΅Π· для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с/Π±Π΅Π· Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния) Π² Ρ‚Π΅Π»Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Однако слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ мноТСство Ρ‚ΠΎΡ‡Π΅ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΈΠΊΠΈ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ОбъявлСниС конструкторов

Π€ΠΎΡ€ΠΌΠ°Ρ‚ объявлСния конструкторов ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠ΅ объявлСниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈ Ρ‚Π΅Π»ΠΎ конструктора. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ состоит, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΈΠ· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа (Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ нСдопустимы). Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, указываСтся имя класса, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ двояко. МоТно ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ имя конструктора совпадаСт с ΠΈΠΌΠ΅Π½Π΅ΠΌ класса. А ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ конструктор ΠΊΠ°ΠΊ бСзымянный, Π° имя класса – ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния, вСдь конструктор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ объявлСн. Π­Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π΅Π»ΠΎ вкуса, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ объявлСния Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ сказываСтся:


public class Human {

private int age;

protected Human(int a) {

age=a;

}

public Human(String name, Human mother,

Human father) {

age=0;

}

}


Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Π΄Π°Π»Π΅Π΅ слСдуСт пСрСчислСниС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π—Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ конструктора throws-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π΅ использовано, см. Π»Π΅ΠΊΡ†ΠΈΡŽ 10 "Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ"). Оно ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡΠΎΠ±ΡƒΡŽ Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ для конструкторов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ – это для конструктора СдинствСнный способ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Если конструктор выполнился Π±Π΅Π· ошибок, Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ создаСтся.

Π’Π΅Π»ΠΎ конструктора пустым Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ поэтому всСгда описываСтся Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках (для ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ скобки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ пустыми).

Π’ отсутствиС ΠΈΠΌΠ΅Π½ΠΈ (ΠΈΠ»ΠΈ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ всСх конструкторов ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ имя, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ класса) сигнатура конструктора опрСдСляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Аналогично, Π² ΠΎΠ΄Π½ΠΎΠΌ классС допускаСтся любоС количСство конструкторов, Ссли Ρƒ Π½ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ сигнатуры.

Π’Π΅Π»ΠΎ конструктора ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ любоС количСство return -Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Если процСсс исполнСния Π΄ΠΎΠΉΠ΄Π΅Ρ‚ Π΄ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ выраТСния, Ρ‚ΠΎ Π½Π° этом мСстС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ конструктора Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ.

Однако Π»ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ конструкторов ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ особСнности. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π΅ осущСствляСтся созданиС ΠΈ инициализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, становится понятно, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ процСсс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π±Π΅Π· обращСния ΠΊ конструкторам всСх Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… классов. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ вводится ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ – ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкой Π² конструкторС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ классу, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ записываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова super.

public class Parent {

private int x, y;

public Parent() {

x=y=0;

}

public Parent(int newx, int newy) {

x=newx;

y=newy;

}

}

public class Child extends Parent {

public Child() {

super();

}

public Child(int newx, int newy) {

super(newx, newy);

}

}


Как Π²ΠΈΠ΄Π½ΠΎ, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ конструктору записываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ super, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΈΠ΄Π΅Ρ‚ пСрСчислСниС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π­Ρ‚ΠΎΡ‚ Π½Π°Π±ΠΎΡ€ опрСдСляСт, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… конструкторов Π±ΡƒΠ΄Π΅Ρ‚ использован. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ классС имССтся ΠΏΠΎ Π΄Π²Π° конструктора ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ конструктор Π² наслСдникС обращаСтся ΠΊ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΌΡƒ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ (это довольно распространСнный, Π½ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ способ).

ΠŸΡ€ΠΎΡΠ»Π΅Π΄ΠΈΠΌ мыслСнно вСсь Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Он начинаСтся ΠΏΡ€ΠΈ исполнСнии выраТСния с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом new, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт имя класса, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈ Π½Π°Π±ΠΎΡ€ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для Π΅Π³ΠΎ конструктора. По этому Π½Π°Π±ΠΎΡ€Ρƒ опрСдСляСтся, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ конструктор Π±ΡƒΠ΄Π΅Ρ‚ использован, ΠΈ происходит Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ². ΠŸΠ΅Ρ€Π²Π°Ρ строка Π΅Π³ΠΎ Ρ‚Π΅Π»Π° содСрТит Π²Ρ‹Π·ΠΎΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ конструктора. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, пСрвая строка Ρ‚Π΅Π»Π° конструктора родитСля Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² ΠΊ Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ВосхоТдСниС ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ наслСдования заканчиваСтся, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π½Π° классС Object, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ СдинствСнный конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π•Π³ΠΎ Ρ‚Π΅Π»ΠΎ пустоС (записываСтся ΠΏΠ°Ρ€ΠΎΠΉ пустых Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок), ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ JVM ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π΄Π°Π»Π΅Π΅ начинаСтся процСсс Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ Π²Π½ΠΈΠ· ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ наслСдования. Π£ самого Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ родитСля, прямого наслСдника ΠΎΡ‚ Object, происходит ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ исполнСния конструктора со Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки. Когда ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ, Π½Π° ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ наслСдования Π²Π½ΠΈΠ·, ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ конструктора, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. НаконСц, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ конструктору исходного класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ new, ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ со Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки. По Π΅Π³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ считаСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ созданным, исполнСниС выраТСния new Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½ΠΎ, Π° Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π° ссылка Π½Π° ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠŸΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ:


public class GraphicElement {

private int x, y;

// ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° экранС

public GraphicElement(int nx, int ny) {

super();

// ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ конструктору

// родитСля Object

System.out.println("GraphicElement");

x=nx;

y=ny;

}

}

public class Square extends GraphicElement {

private int side;

public Square(int x, int y, int nside) {

super(x, y);

System.out.println("Square");

side=nside;

}

}

public class SmallColorSquare extends Square {

private Color color;

public SmallColorSquare(int x, int y, Color c) {

super(x, y, 5);

System.out.println("SmallColorSquare");

color=c;

}

}


ПослС выполнСния выраТСния создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° экранС появится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:


GraphicElement

Square

SmallColorSquare


Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ super ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС конструктора. Часто ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ конструкторы Π²ΠΎΠΎΠ±Ρ‰Π΅ Π±Π΅Π· Ρ‚Π°ΠΊΠΎΠ³ΠΎ выраТСния. Π’ этом случаС компилятор ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкой ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ добавляСт Π²Ρ‹Π·ΠΎΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ конструктора Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ( super() ). Если Ρƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Ρ‚Π°ΠΊΠΎΠ³ΠΎ конструктора Π½Π΅Ρ‚, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ super ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ записано явно (ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Напомним, Ρ‡Ρ‚ΠΎ, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, конструкторы Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΠΈΡ… нСльзя Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ явно, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, конструкторы Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ наслСдству. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ классС объявлСно ΠΏΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… конструкторов ΠΈ трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ класс-наслСдник ΠΈΠΌΠ΅Π» Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ всС ΠΈΡ… ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ.

Класс ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ конструктор, ΠΈΠ½Π°Ρ‡Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½ΠΈ ΠΎΡ‚ Π½Π΅Π³ΠΎ, Π½ΠΈ ΠΎΡ‚ Π΅Π³ΠΎ наслСдников. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли Π² классС Π½Π΅ объявлСн Π½ΠΈ ΠΎΠ΄ΠΈΠ½ конструктор, компилятор добавляСт ΠΎΠ΄ΠΈΠ½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π­Ρ‚ΠΎ public -конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ с Ρ‚Π΅Π»ΠΎΠΌ, описанным ΠΏΠ°Ρ€ΠΎΠΉ пустых Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок. Из этого слСдуСт, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для классов, Ρƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… объявлСн конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΈΠ½Π°Ρ‡Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка компиляции. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ссли Π·Π°Ρ‚Π΅ΠΌ Π² Ρ‚Π°ΠΊΠΎΠΉ класс добавляСтся конструктор (Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈΠ»ΠΈ Π±Π΅Π·), Ρ‚ΠΎ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ большС Π½Π΅ вставляСтся:


/* Π­Ρ‚ΠΎΡ‚ класс ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ конструктор.

*/

public class One {

// Π‘ΡƒΠ΄Π΅Ρ‚ создан конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

// Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс Object ΠΈΠΌΠ΅Π΅Ρ‚

// конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

}

/* Π­Ρ‚ΠΎΡ‚ класс ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ конструктор. */

public class Two {

// ЕдинствСнный конструктор класса Two.

// Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ new Two() ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ!

public Two(int x) {


}

}

/* Π­Ρ‚ΠΎΡ‚ класс ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° конструктора. */

public class Three extends Two {

public Three() {

super(1);

// Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ super трСбуСтся

}

public Three(int x) {

super(x);

// Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ super трСбуСтся

}

}


Если класс ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ конструктора, допускаСтся Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ· Π½ΠΈΡ… ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ super, Π° this – Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ конструктор этого ΠΆΠ΅ класса.

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


public class Vector {

private int vx, vy;

protected double length;

public Vector(int x, int y) {

super();

vx=x;

vy=y;

length=Math.sqrt(vx*vx+vy*vy);

}

public Vector(int x1, int y1,

int x2, int y2) {

super();

vx=x2-x1;

vy=y2-y1;

length=Math.sqrt(vx*vx+vy*vy);

}

}


Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° конструктора ΡΠΎΠ²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ дСйствия, поэтому ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ Π²ΠΈΠ΄ записи:


public class Vector {

private int vx, vy;

protected double length;

public Vector(int x, int y) {

super();

vx=x;

vy=y;

length=Math.sqrt(vx*vx+vy*vy);

}

public Vector(int x1, int y1,

int x2, int y2) {

this(x2-x1, y2-y1);

}

}


Π‘ΠΎΠ»ΡŒΡˆΠΈΠΌ достоинством Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° записи являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ дублирования ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. НапримСр, Ссли процСсс ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого класса увСличится Π½Π° ΠΎΠ΄ΠΈΠ½ шаг (скаТСм, добавится ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄Π»ΠΈΠ½Ρ‹ Π½Π° равСнство Π½ΡƒΠ»ΡŽ), Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ внСсти Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ конструктор. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ случайных ошибок, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ исчСзаСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚ΠΈΡ€Π°ΠΆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСния Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… мСстах.

РазумССтся, Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ конструкторам своСго класса Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ зацикливаниям, ΠΈΠ½Π°Ρ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π½Π° ошибка компиляции. Π¦Π΅ΠΏΠΎΡ‡ΠΊΠ° this Π΄ΠΎΠ»ΠΆΠ½Π° Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ super, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ (явно ΠΈΠ»ΠΈ нСявно) хотя Π±Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· конструкторов. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ конструкторы всСх Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… классов, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ конструктора, Π²ΠΎΠ²Π»Π΅Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π² процСсс создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.