3. Ichma-ich joylashgan sinflarga qanday foydalanish modifikatorlari qo‘llanilishi mumkin?
Ichma-ich joylashgan sinflarga modifikatorlar oddiy sinflarga o‘xshash qo‘llanilishi mumkin:
private. Bunday holatda ichma-ich joylashgan sinf tashqi sinifning{} chegarasi doirasida ko‘rinadi;
public. Bunday holda ichma-ich joylashgan sinf tashqi sinf chegarasida, tashqi sinf nusxasining hosilaviy sinfda, shuningdek, to‘plam tashqarisida foydalanilishi mumkin.
protected. Bunday holatda ichma-ich joylashgan sinf tashqi sinf doirasida, shuningdek, hosilaviy bo‘lgan sinflar usullarida foydalanishi mumkin;
internal. ichma-ich joylashgan sinf to‘plam doirasida foydalanishi mumkin va yig to‘plam ish chegarasidan tashqarida foydalanishi mumkin emas;
protected internal. ichma-ich joylashgan sinf tashqi sinf usullaridan, muras bo‘lgan sinflar usullaridan foydalanish mumkin bo‘lishi yoki joriy to‘plam tashqarisidagi usullardan foydalanish mumkin emas.
Modifikatorlarning foydalanishi sinf a’zolari (usullari) dagi kabi amalga oshiriladi.
4. Turli foydalanish modifikatorlariga ega sinflardan foydalanishni ko‘rsatish uchun misol
Misolda ichma-ich joylashgan sinflarni e’lon qilish va ulardan foydalanish ko‘rsatiladi, ularda turli foydalanish modifikatorlari ishlatiladi.
Outer sinfi e’lon qilinadi, unda quyidagilar foydalaniladi:
ikkita ichki public-o‘zgaruvchi d va sd nomli. sd o‘zgaruvchisi statik sifatida e’lon qilindi;
Inner1 private-sinfiga murojaatni namoyish etuvchi GetInner1(), ichki usuli;
private kabi e’lon qilingan ichma-ich joylashgan Inner1 sinfi;
public kabi e’lon qilingan ichma-ich joylashgan Inner2 sinfi;
internal kabi e’lon qilingan ichma-ich joylashgan Inner3 sinfi;
protected kabi e’lon qilingan ichma-ich joylashgan Inner4 sinfi;
protected internal. kabi e’lon qilingan ichma-ich joylashgan Inner5 sinfi.
Ichma-ich joylashgan har bir sinfda quyidagilar e’lon qilinadi:
butun turdagi bir nostatik o‘zgaruvchi;
butun turdagi bir statik o‘zgaruvchi.
Outer sinfidagi listing quyidagicha:
//Outer sinfida 5 ta ilova qilingan sinf mavjud
public class Outer
{
//Outer sinfining ichki o‘zgaruvchilari
public int d;
static public int sd;
//private sinfga kirish sinfning ichki usulidan
public Inner1 GetInner1()
{
Inner1 i1 = new Inner1 () ;//klassning nusxasini yaratish Inner1
//klass ma’lumotlari a’zosiga sinf nusxasi orqali kirish
i1.d1 = 25;
// ichma-ich joylashgan sinfning statik a’zosiga kirish Inner1
Inner1.sd1 = 30;
return i1;
}
//private – ichma-ich joylashgan sinf Inner1
private class Inner1
{
public int d1;
public static int sd1;
}
//public - ilova qilingan klass Inner2
public class Inner2
{
public int d2;
public static int sd2;
}
//internal-ilova sinfi Inner3
internal class Inner3
{
public int d3;
public static int sd3;
}
//protected – qo‘yilgan sinf Inner4
protected class Inner4
{
public int d4;
public static int sd4;
}
//protected-internal Inner5
protected internal class Inner5
{
public int d5;
public static int sd5;
}
}
Qo‘yilgan sinflardan ayrim usulda foydalanish quyidagilar bo‘lishi mumkin:
//Qo‘yilgan sinflardan foydalanish
// 1. Outer klassidagi ob’ektni e’lon qilish
Outer o = new Outer();
o.d = 300 ;//ichki o‘zgaruvchiga Outer sinfining nusxasi orqali kirish
Outer.sd = 230 ;//statik o‘zgaruvchiga kirish
// 2. Inner1 ichma-ich joylashgan sinfga Outer sinfi nusxasi orqali murojaat //qilib bo‘lmaydi
// Outer. i1; - xato, sinf private sifatida e’lon qilindi
// 3. Inner2 public-sinf ob’ektini e’lon qilish
Outer.Inner2 i2 = new Outer.Inner2();
i2.d2 = 440;
Outer.Inner2.sd2 = 500 ;//statik o‘zgaruvchiga kirish
// 4. Inner3 Internal-sinf ob’ektini e’lon qilish
Outer.Inner3 i3 = new Outer.Inner3();
i3.d3 = 100;
Outer.Inner3.sd3 = 400 ;//statik o‘zgaruvchiga kirish
// 5. Mavjud imkoniyatni faqat muras bo‘lgan sinfdan e’lon qilish mumkin
// Outer.Inner4 i4; - xato
// 6. protested-internal-klass ob’ektini e’lon qilish mumkin
Outer.Inner5 i5 = new Outer.Inner5();
i5.d5 = 200;
Outer.Inner5.sd5 = -100;
Yuqorida keltirilgan koddan ko‘rsatilganki, faqat Inner2, Inner3, Inner5 sinflari uchun ob’ektlarni yaratish mumkin. Inner4 sinfini yaratish uchun Outer sinfini muras qiladigan boshqa sinfni e’lon qilish lozim:
//sinf Outer2 Outer sinfidan meros boʻlgan
class Outer2 : Outer
{
//meros etilgan sinf usulida protected-sinfga kirish imkoniyati mavjud Inner4
void SomeMethod()
{
//sinf nusxasini yaratish Outer.Inner4
Inner4 i4 = new Inner4 () ;//ishlaydi
i4.d4 = 23 ;//sinf nusxasi orqali foydalanish
Inner4.sd4 = 330 ;//statik o‘zgaruvchiga murojaat
}
}
Ushbu misol shuningdek, qo‘yilgan private-klass unda e’lon qilingan statik o‘zgaruvchiga boshqa sinflar usullaridan foydalanishni yashiradi. Shuningdek, ilova qilingan protected-sinfi ham kirishni yashiradi.
5. Statik qo‘yilgan sinfni nostatik darajada e’lon qilish va ulardan foydalanish. Misol
Statik bo‘lmagan sinfda statik sinf e’lon qilinishi mumkin (statik asosiy so‘z bilan). Bu – mazkur sinfning statik sinfi o‘ziga xos umumiy resurs ekanini bildiradi. Statik sinf elementlariga kirish bevosita statik sinf nomi bilan amalga oshiriladi.
Misol. Ixtisoslashtirilgan statik (statik) sinfning e’lon qilingan Outer sinfi e’lon qilinadi. Inner sinfida statik ichki public oʻzgaruvchanlik eʼlon qilinadi. Outer sinfi matni quyidagilar:
//sinf Outer — nostatik
public class Outer
{
//Outer sinfining ichki o‘zgaruvchilari
public int d;
static public int sd;
//statik ilova qilingan sinf Inner
public static class Inner
{
//faqat statik o‘zgaruvchilar statik sinfda e’lon qilinishi mumkin
public static int sd ;//Inner sinfining statik ichki o‘zgaruvchisi
}
}
Statik qo‘yilgan sinfdan foydalanish shunday bo‘lishi mumkin:
//Outer.Inner
Outer.Inner.sd = 45;
//Outer klassidagi ob’ektni (nusxani) yaratish
Outer o = new Outer();
o.d = 30 ;//ob’ekt orqali sinf nusxasining o‘zgaruvchilaridan foydalanish mumkin
Outer.sd = 102 ;//Outer klassidagi statik o‘zgaruvchiga kirish
//statik klass ob’ektini yaratib bo‘lmadi
//Outer.Inner i = new Outer.Inner(); – bu xato!
6. Statik sinfda nostatik qo‘yilgan sinfni e’lon qilish mumkinmi?
Bunday bo‘lishi mumkin. Statik sinfda statik bo‘lmagan qo‘shimcha sinflarni e’lon qilish mumkin. Biroq, statik sinfda nostatik o‘zgarishlar va usullarni e’lon qilish mumkin emas.
Statik o‘zgaruvchilar, usullar, sinflardan foydalanish to‘g‘risida quyidagi mavzularda batafsil tasvirlanadi:
Statik sinflar, usullar, o‘zgaruvchilar. Statik konstruktorlar. Kalit so‘zi statik
Masalan. Statik bo‘lmagan Inner sinfini amalga oshirishni o‘z ichiga olgan Outer statik sinfi e’lon qilinsin
//sinf Outer – statik
public static class Outer
{
//Outer sinfining ichki o‘zgaruvchilari
//faqat statik nusxalarni statik sinfda e’lon qilish mumkin
// public int d; - xato!
static public int sd;
//statik bo‘lmagan Inner sinfi - statik sinfda e’lon qilinishi mumkin
public class Inner
{
public int d ;//nostatik o‘zgaruvchi
public static int sd ;//Inner sinfining statik ichki o‘zgaruvchisi
}
}
Outer va Outer.Inner sinflaridan foydalanish, masalan, quyidagilar bo‘lishi mumkin:
//statik sinfdan foydalanish
//Outer.Inner sd klassidagi statik o‘zgaruvchiga kirish
Outer.Inner.sd = 230;
//Outer klassidagi sd statik o‘zgaruvchiga kirish
Outer.sd = 132;
//Statik sinfning nusxasini (ob’ektini) yaratib bo‘lmadi
//Outer o = New Outer () ;//xato, chunki Outer – statik sinf
//kiritilgan Outer.Inner sinfining nusxasini yaratish
Outer.Inner i = new Outer.Inner();
i.d = 323 ;//Outer.Inner
Do'stlaringiz bilan baham: |