JavaRush /Курстар /All lectures for KY purposes /Ички статикалык класстар

Ички статикалык класстар

All lectures for KY purposes
Деңгээл , Сабак
жеткиликтүү
Ички статикалык класстар - 1

— Демек, экинчи тема - киргизилген класстар.

Ички класс жарыяланганда static деген ачкыч сөздү койсок жана анда ички класс киргизилген болот.

Static деген сөз киргизилген класска жакын эмне мааниге ээ экенин карап көрөлү. Сенин оюңча?

— Эгерде өзгөрмө статикалык болуп жарыяланса, анда ал бир эле нускада болот, ал эми киргизилген класстык статикалык болуп жарыяланса, анда андай класстын бир гана объектиси түзүлөбү?

— Static деген сөз алмаштырбашы керек. Эгерде өзгөрмө статикалык болуп жарыяланса, анда ал бир гана нускада болот — туура. Бирок статикалык киргизилген класс бул жагынан статикалык методго көбүрөөк окшош. Классты жарыялоо алдында static деген сөз бул класс жарыяланган тышкы класс объектилерине шилтеме сактабай турганын көрсөтөт.

— Хат. Кадимки методдор жашыруун түрдө объектиге шилтемени сактайт, ал эми статикалык болсо — жок. Статикалык класстар менен да ушундай, туурабы, Элли?

— Туура. Сеники өтө акылдуу. Статикалык киргизилген класстар алар жарыяланган тышкы класстын объектилерине жашыруун шилтемелерди сакташпайт.

class Zoo
{
 private static int count = 7;
 private int mouseCount = 1;

 public static int getAnimalCount()
 {
  return count;
 }

 public int getMouseCount()
 {
  return mouseCount;
 }

 public static class Mouse { public Mouse() { } public int getTotalCount() { return count + mouseCount; //компиляцияда ката. } }
}

Бул мисалды жакшылап карап көрөлү.

Статикалык метод getAnimalCount кайсы өзгөрмөлөргө кайрыла алат?

— Тек статикалык өзгөрмөлөргө. Бул статикалык метод эмеспи.

Метод getMouseCount кайсы өзгөрмөлөргө кайрыла алат?

— Статикалыкка да, статикалык эмеске да. Ал Zoo тибиндеги объектке (this) катары жашыруун түрдө шилтемени сактайт.

— Туура. Демек, статикалык киргизилген класс Mouse, статикалык метод сыяктуу эле, Zoo класстын статикалык өзгөрмөлөрүнө кайрыла алат, бирок статикалык эмес өзгөрмөлөргө кайрыла албайт.

Биз Zoo классынан бир дагы объект түзүлбөсө да, Mouse классынын объектилерин түзүүбүз мүмкүн. Бул кантип жасалса болот:

class Home
{
 public static void main(String[] args)
 {
  Zoo.Mouse mouse = new Zoo.Mouse();
 }
}

Чындыгында Mouse классы эң кадимки класс. Ал Zoo классынын ичинде жарыялангандыктан, анын эки өзгөчөлүгү бар.

1) Киргизилген класстын объекттерин (Mouse классын) тышкы класс-ата-эненин сыртында түзүүдө, дагы чекит аркылуу тышкы класстын атын көрсөтүү керек.

Мисалы, мындай: Zoo.Mouse.

2) Zoo.Mouse классы жана анын объекттери Zoo классынын жеке статикалык өзгөрмөлөрүнө жана методдоруна кире алышат (Mouse классы Zoo классынын ичинде да жарыяланган).

Бүгүнкү күндүн бардыгы ушул.

— Башкача айтканда, жөн эле кошумча атбы жана баарыбы?

Ооба.

— Бул көрүнгөндөн да жөнөкөй экен.

Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION