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

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

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

РазграничСния доступа ΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ элСмСнтам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² (Ρ‡Π΅Ρ€Π΅Π· составноС имя ΠΈΠ»ΠΈ прямоС ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅), Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ конструкторов, наслСдовании, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ². Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСдоступныС Ρ‚ΠΈΠΏΡ‹ запрСщаСтся.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° уровня доступа проводится компилятором. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:


public class Wheel {

private double radius;

public double getRadius() {

return radius;

}

}


Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля radius нСдоступно снаруТи класса, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ getRadius() ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ.

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° модуля компиляции:


package first;

// НСкоторый класс Parent

public class Parent {


}

package first;

// Класс Child наслСдуСтся ΠΎΡ‚ класса Parent,

// Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ доступа ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

class Child extends Parent {


}

public class Provider {

public Parent getValue() {

return new Child();

}

}


К ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ getValue() класса Provider ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΈ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° first, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ объявлСн ΠΊΠ°ΠΊ public. Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ экзСмпляр класса Child, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСдоступСн ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Однако ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ² являСтся ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ:


package second;

import first.*;

public class Test {

public static void main(String s[])

{

Provider pr = new Provider();

Parent p = pr.getValue();

System.out.println(p.getClass().getName());

// (Child)p - ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС компиляции!

}

}


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚:


first.Child


Π’ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° самом Π΄Π΅Π»Π΅ Π² классС Test Ρ€Π°Π±ΠΎΡ‚Π° ΠΈΠ΄Π΅Ρ‚ с экзСмпляром нСдоступного класса Child, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΠΌΡƒ дСлаСтся Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ класс Parent. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ явноС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π”Π°, Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° "ΡƒΠ³Π°Π΄Π°Π½" Π²Π΅Ρ€Π½ΠΎ, Π½ΠΎ доступ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ всСгда Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


public class Point {

private int x, y;


public boolean equals(Object o) {

if (o instanceof Point) {

Point p = (Point)o;

return p.x==x && p.y==y;

}

return false;

}

}


Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ класс Point с двумя полями, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ поля ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ – private. Π”Π°Π»Π΅Π΅ попытаСмся ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ стандартный ΠΌΠ΅Ρ‚ΠΎΠ΄ equals() Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ для Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ экзСмплярами класса Point, ΠΈΠ»ΠΈ Π΅Π³ΠΎ наслСдников (Π»ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° instanceof ), Π² случаС равСнства ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»ΠΎΡΡŒ истинноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° строку, Π³Π΄Π΅ дСлаСтся сравнСниС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚,– для этого приходится ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ private -полям Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°!

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρ‚Π°ΠΊΠΎΠ΅ дСйствиС ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ private допускаСт обращСния ΠΈΠ· любой Ρ‚ΠΎΡ‡ΠΊΠΈ класса, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΎΠ½ΠΎ производится.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ разграничСния доступа Π² Java Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ курса.

ОбъявлСниС классов

Рассмотрим Π±Π°Π·ΠΎΠ²Ρ‹Π΅ возмоТности объявлСния классов.

ОбъявлСниС класса состоит ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ Ρ‚Π΅Π»Π° класса.

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ класса

Π’Π½Π°Ρ‡Π°Π»Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ класса. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа для класса ΡƒΠΆΠ΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΈΡΡŒ. Допустимым являСтся public, Π»ΠΈΠ±ΠΎ Π΅Π³ΠΎ отсутствиС – доступ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Класс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСн ΠΊΠ°ΠΊ final. Π’ этом случаС Π½Π΅ допускаСтся созданиС наслСдников Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса. На своСй Π²Π΅Ρ‚ΠΊΠ΅ наслСдования ΠΎΠ½ являСтся послСдним. Класс String ΠΈ классы-ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой final -классы.

ПослС списка ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² указываСтся ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class, Π° Π·Π°Ρ‚Π΅ΠΌ имя класса – ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Java-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΌ объявлСниСм класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ компиляции:


class A { }


Π€ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Ρ‚Π΅Π»ΠΎ класса, Π½ΠΎ ΠΎ Π½Π΅ΠΌ ΠΏΠΎΠ·ΠΆΠ΅.

Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ становится простым ΠΈΠΌΠ΅Π½Π΅ΠΌ класса. ПолноС составноС имя класса строится ΠΈΠ· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ составного ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ объявлСн (Ссли это Π½Π΅ бСзымянный ΠΏΠ°ΠΊΠ΅Ρ‚), ΠΈ простого ΠΈΠΌΠ΅Π½ΠΈ класса, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости класса, Π³Π΄Π΅ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ доступСн ΠΏΠΎ своСму простому ΠΈΠΌΠ΅Π½ΠΈ, – Π΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚.

Π”Π°Π»Π΅Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово extends, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ имя (простоС ΠΈΠ»ΠΈ составноС) доступного Π½Π΅- final класса. Π’ этом случаС ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹ΠΉ класс наслСдуСтся ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ класса. Если Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ extends Π½Π΅ примСняСтся, Ρ‚ΠΎ класс наслСдуСтся Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΡ‚ Object. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ extends Object допускаСтся ΠΈ игнорируСтся.

class Parent {


}

// = class Parent extends Object { }

final class LastChild extends Parent { }

// class WrongChild extends LastChild { }

// ошибка!!

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ final -класс ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС компиляции.

Если Π² объявлСнии класса A ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ extends B, Ρ‚ΠΎ класс A Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ прямым наслСдником класса B.

Класс A считаСтся наслСдником класса B, Ссли:


* A являСтся прямым наслСдником B ;

* сущСствуСт класс C, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся наслСдником B, Π° A являСтся наслСдником C (это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ примСняСтся рСкурсивно).


Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ наслСдования Π½Π° нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π²Π²Π΅Ρ€Ρ….

Если компилятор ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ класс являСтся своим наслСдником, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка компиляции:


// ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции class

A extends B { }

class B extends C { }

class C extends A { }

// ошибка! Класс А стал своим наслСдником


Π”Π°Π»Π΅Π΅ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово implements, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ пСрСчислСниС Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ ΠΈΠΌΠ΅Π½ (простых ΠΈΠ»ΠΈ составных, повторСния Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹) доступных интСрфСйсов:


public final class String implements Serializable, Comparable { }


Π’ этом случаС говорят, Ρ‡Ρ‚ΠΎ класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ пСрСчислСнныС интСрфСйсы. Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, класс ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ любоС количСство интСрфСйсов. Если Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ implements отсутствуСт, Ρ‚ΠΎ класс Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… интСрфСйсов, здСсь Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅Ρ‚.

Π”Π°Π»Π΅Π΅ слСдуСт ΠΏΠ°Ρ€Π° Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ пустыми ΠΈΠ»ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ описаниС Ρ‚Π΅Π»Π° класса.

ВСло класса

Π’Π΅Π»ΠΎ класса ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ объявлСниС элСмСнтов (members) класса:


* ΠΏΠΎΠ»Π΅ΠΉ;

* Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² (классов ΠΈ интСрфСйсов);


ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… допустимых конструкций:

* конструкторов;

* ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²

* статичСских ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ².


Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ класса ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ наслСдству, Π½Π΅-элСмСнты – Π½Π΅Ρ‚. Для элСмСнтов простыС ΠΈΠΌΠ΅Π½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ объявлСнии, составныС Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ класса, ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΈ простого ΠΈΠΌΠ΅Π½ΠΈ элСмСнта. ΠžΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости элСмСнтов являСтся всС объявлСниС Ρ‚Π΅Π»Π° класса. ДопускаСтся ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ любого ΠΈΠ· всСх Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа. НапоминаСм, Ρ‡Ρ‚ΠΎ соглашСния ΠΏΠΎ имСнованию классов ΠΈ ΠΈΡ… элСмСнтов ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΈΡΡŒ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ.

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

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ класса ΡΠ²Π»ΡΡŽΡ‚ΡΡ элСмСнты, описанныС Π² объявлСнии Ρ‚Π΅Π»Π° класса ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ наслСдству ΠΎΡ‚ класса-родитСля (ΠΊΡ€ΠΎΠΌΠ΅ Object – СдинствСнного класса, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ родитСля) ΠΈ всСх Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Ρ… интСрфСйсов ΠΏΡ€ΠΈ условии достаточного уровня доступа. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли класс содСрТит элСмСнты с доступом ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚ΠΎ Π΅Π³ΠΎ наслСдники ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ элСмСнтов. ΠšΠ»Π°ΡΡΡ‹ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ элСмСнтов, Π° ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² – Ρ‚ΠΎΠ»ΡŒΠΊΠΎ protected ΠΈ public. private -элСмСнты ΠΏΠΎ наслСдству Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ.

Поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ полям всСгда записываСтся Π±Π΅Π· скобок, Π° ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ – всСгда со скобками.

Рассмотрим всС эти конструкции Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

ОбъявлСниС полСй

ОбъявлСниС ΠΏΠΎΠ»Π΅ΠΉ начинаСтся с пСрСчислСния ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ любого ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа, Π»ΠΈΠ±ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ вовсС, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ПолС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСно ΠΊΠ°ΠΊ final, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ инициализируСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ своСго значСния. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с final -ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ - инициализация ΠΏΡ€ΠΈ объявлСнии:


final double PI=3.1415;


Π’Π°ΠΊΠΆΠ΅ допускаСтся инициализация final -ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ конструктора класса.

НС ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ константы компиляции, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ функциям, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


final long creationTime =

System.currentTimeMillis();


Π”Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ врСмя создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. БущСствуСт Π΅Ρ‰Π΅ Π΄Π²Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° - transient ΠΈ volatile. Они Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… лСкциях.

ПослС списка ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² указываСтся Ρ‚ΠΈΠΏ поля. Π—Π°Ρ‚Π΅ΠΌ ΠΈΠ΄Π΅Ρ‚ пСрСчислСниС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»Π΅ΠΉ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ:


int a;

int b=3, c=b+5, d;

Point p, p1=null, p2=new Point();


ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»Π΅ΠΉ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹. Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈ объявлСнии становится простым ΠΈΠΌΠ΅Π½Π΅ΠΌ поля. БоставноС имя формируСтся ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ класса ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΈ простого ΠΈΠΌΠ΅Π½ΠΈ поля. ΠžΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости поля являСтся всС объявлСниС Ρ‚Π΅Π»Π° класса.