Vorislik va sinf a’zolariga kirish xuquqi
Vorislik yopiq kirish xuquqiga bog’liq chegaralarni bekor qilmaydi. Shuning uchun xosila sinf baza sinfni yopiq deb e’lon qilingan a’zolariga kirish xuquqidan maxrum bo’ladi. Masalan, keyingi kodda ko’rsatishicha, agar width va height a’zolari TwoDShape sinfini private a’zosini hosil qilsa, u holda Triangle sinfi unga kirish xuquqiga ega emas.
G’G’ Dostup k zakro’to’m chlenam ne nasleduetsya.
G’G’ Etot primer ne skompiliruetsya.
using System;
G’G’ Klass dvumerno’x ob’ektov,
class TwoDShape {
double width; G’G’ Teper eto private-chlen.
double height; G’G’ Teper eto private-chlen.
public void showDim( ) {
Console.WriteLine("Shirina i vo’sota ravno’ " Q
width Q " i " Q height);
}
}
G’G’ Klass Triangle vo’voditsya iz klassa TwoDShape.
class Triangle : TwoDShape {
public string style; G’G’ Tip treugolnika.
G’G’ Metod vozvrahaet znachenie plohadi treugolnika.
public double area ( ) {
return width * height G’ 2; G’G’ Oshibka, nelzya poluchit
G’G’ pryamoy dostup k zakro’to’m
G’G’ chlenam.
G’G’ Otobrajaem tip treugolnika.
public void showStyle( ) {
Console.WriteLine ("Treugolnik " Q style);
}
}
width va height – yopiq a’zolardir, ular faqat xususiy sinf a’zolari uchun kirish xuquqiga ega. Hosila sinfida esa bu xuquq tarqalmagan.
Shunga qaramay S# da bu muammoni yechish imkoniyatlari mavjud. Bulardan biri – protected a’zolardir, ikkinchisi ochiq usul va turlardan foydalangan xolda yopiq ma’lumotlarga kirishdir:
G’G’ Ispolzovanie svoystv dlya zapisi i chteniya zakro’to’x
G’G’ chlenov klassa.
using System;
G’G’ Klass dvumerno’x ob’ektov.
class TwoDShape {
double pri_width; G’G’ Teper eto private-chlen.
double pri_height; G’G’ Teper eto private-chlen.
G’G’ Svoystva width i height.
public double width {
get { return pri_width; }
set { pri_width q value; }
}
public double height {
get { return pri_height; }
set ( pri_height q value; }
}
public void showDim() {
Console.WriteLine("Shirina i vo’sota ravno’ " Q
width Q " i " Q height);
}
}
G’G’ Klass treugolnikov - proizvodno’y ot klassa TwoDShape.
class Triangle : TwoDShape {
public string style; G’G’ Tip .treugolnika.
G’G’ Metod vozvrahaet znachenie plohadi treugolnika.
public double area() {
return width * height G’ 2;
}
G’G’ Otobrajaem tip treugolnika.
public void showStyle() {
Console.WriteLine("Treugolnik " Q style);
}
}
class Shapes2 {
public static void Main ( ) {
Triangle t1 q new Triangle ( );
Triangle t2 q new Triangle ( );
t1.width q 4.0;
t1.height q 4.0;
t1.style q "ravnobedrenno’y";
t2.width q 8.0;
t2.height q 12.0;
t2.style q "pryamougolno’y";
Console.WriteLine("Informatsiya o t1: ");
t1.showStyle ( ) ;
t1.showDim ( ) ;
Console.WriteLine("Plohad ravna " Q t1.area());
Console.WriteLine();
Console.WriteLine("Informatsiya o t2: ");
t2.showStyle ();
t2.showDim ();
Console.WriteLine("Plohad ravna " Q t2.area());
}
}
Baza va xosila sinflari bu holda superklass va podklass deb ataladi. Bu terminlar Java dasturlash tilidan olingan bo’lib, superklass- bu S# da baza sinfi, podklass- bu C# da hosila sinfi. S da ham «baza sinf hosila sinf» terminlari qo’llaniladi.
Do'stlaringiz bilan baham: |