void someNewMethod();
}
Buning sababi shundaki, ushbu interfeysni amalga oshiradigan sinf (MyClass) yangi usulni amalga oshirmaydi. Interfeysni amalga oshiradigan sinf interfeysning barcha mavhum usullarini amalga oshirishi kerak. Shuning uchun, interfeysga mavhum usul qo'shganda , yangi usul interfeysingizni amalga oshiradigan barcha sinflar tomonidan amalga oshirilishiga ishonch hosil qilishingiz kerak. Ko'pincha bu mumkin
emas, chunki siz qaysi sinflar sizning interfeysingizni amalga oshirg
Ushbu muammoni hal qilish uchun Java qo'llab-quvvatladi
standart usullar va interdagi statik usullar
yuzlar. Bu interfeyslarga usullarni ularni amalga
oshiradigan sinflarni o'zgartirmasdan qo'shish imkonini beradi .
YANA ACCESS MODIFIERLARI HAQIDA
Meros bilan bog'liq turli mavzularni yoritib bo'lgach , ob'ektga yo'naltirilgan dasturlashda kirish modifikatorlari tushunchasiga qaytaylik . Ilgari siz kirish modifikatori darvozabon kabi ishlashini bilib oldingiz : u ma'lum bir maydon yoki usulga kimga ruxsat berilishini boshqaradi . Java 3 ta kirish modifikatorini qo'llab-quvvatlaydi: shaxsiy (xususiy kirish),
8.5. Modifikatorlarga yana kirish 165
ommaviy (ochiq kirish) va himoyalangan (himoyalangan kirish). Agar kirish modifikatori belgilanmagan bo'lsa, u holda paketga kirish darajasi ishlatiladi.
Shaxsiy, ommaviy, xavfsiz va ommaviy kirish qanday ishlashini tushunish uchun misolni ko'rib chiqaylik.
Kontseptsiyani ko'rsatish uchun chegaralardan foydalaniladi , lekin
Yuqoridagilarning barchasi usullarga ham tegishli.
ModifierDemo nomli yangi NetBeans loyihasini yarating . ModiferDemo.java faylidagi kodni quyidagi bilan almashtiring:
paket modifikatori demosi; umumiy sinf ModifierDemo {
public int publicNum = 2; protected int protectedNum = 3; int packagePrivateNum = 4; private int privateNum = 1;
}
Endi modifierdemo paketida boshqa sinf yarating
va uni ClassesInSamePackage deb nomlang. ClassesInSamePackage.java faylidagi kodni quyidagi bilan almashtiring :
paket modifikatori demosi;
umumiy sinf ClassesInSamePackage
{
// Shunchaki bo'sh sinf
}
ClassA sinfi ModifierDemo-ni kengaytiradi
{
public void printMessages()
{
// Ruxsat berilgan
System.out.println(publicNum);
166 8 -bob. Obyektga yo‘naltirilgan dasturlash
// Ruxsat
berilgan System.out.println(protectedNum);
// Ruxsat
berilgan System.out.println(packagePrivateNum);
// Ruxsat berilmaydi! System.out.println(privateNum);
} }
sinf B
{ public void printMessages() {
ModifierDemo p = new ModifierDemo();
// Ruxsat
berilgan System.out.println(p.publicNum);
// Ruxsat
berilgan System.out.println(p.protectedNum);
// Ruxsat
berilgan System.out.println(p.packagePrivateNum);
// Ruxsat berilmaydi! System.out.println(p.privateNum);
} }
Ushbu kod ClassesInSamePackage.java fayliga ikkita sinf qo'shadi . ClassA ModifierDemo sinfini va sinfni kengaytiradi ClassB emas.
ClassA da birinchi ikkita println() buyrug'i hech qanday xatolikka yo'l qo'ymaydi, chunki olingan sinf ota- sinfning har qanday umumiy himoyalangan maydonlariga kira oladi. Shuningdek, uchinchi println() buyrug'i bajarilmaydi
8.5. Modifikatorlarga yana kirish 167
ikkala fayl sifatida xato xabarlarini beradi (ModifierDemo.
java va ClassesInSamePackage.java) bir xil paketda. Odatiy bo'lib, kirish modifikatorisiz e'lon qilingan maydon paketga kirish darajasiga ega deb hisoblanadi. Bir
Do'stlaringiz bilan baham: |