14-Lekciya: Static hám final maydanlar hám metodlar. Kóriniwshilik modifikatorları Joba: 1. Modifikatolar 2. Statikalıq maydanlar, metodlar; 3. Final maydanlar, metodlar hám klasslar. </TITUNF></PI></PROGRAMMALASTIRIW></A.B.ORINBAEV> Modifikatorlar Javada barlıq klass maydanları hám metodları kóriniwshilik modifikatorlarına iye boladı. Javada modifikatorlardıń tómendegishe túrleri bar: public: ashıq klass hám klass aǵzaları bolıp, bul modifikator menen táriyplengen maydanlar hám metodlar, qálegen paketdegi klasslar ushın kórinedi; private: jabıq klass hám klass aǵzaları bolıp, bul modifikator menen táriyplengen maydanlar hám metodlar, tek ǵana sol klass ishinde ǵana kórinedi; protected: bul modifikator menen táriyplengen maydanlar hám metodlar, sol paket ishindegi birneshe klasslar yamasa basqa paketdegi miyras klasslar ushın kórinedi </TITUNF></PI></PROGRAMMALASTIRIW></A.B.ORINBAEV> Modifikatorlar default modifikator: maydan hám metodlar aldına joqarıdaǵı modifikatordıń (public, private, protected) heshqaysısı jazılmasa onda default modifikator boladı. Bul modifikatorda tek ǵana sol paket ishindegi klasslar ushın kórinedi. ruxsat Tip Gilt sózler Óz klası Óz paketi Miyras klass Barlıq klasslar jabıq private bar joq joq joq paket (modifikator joq) bar bar joq joq qorǵalǵan protected bar bar bar joq ashıq public bar bar bar bar </TITUNF></PI></PROGRAMMALASTIRIW></A.B.ORINBAEV> Mısal 1 class Person{ String name; protected int age; public String address; private String phone; public Person(String name, int age, String address, String phone){ this.name = name; this.age = age; this.address = address; this.phone = phone; } public void displayName(){ System.out.println("Name: "+ name); } void displayAge(){ System.out.println("Age: "+ age); } </TITUNF></PI></PROGRAMMALASTIRIW></A.B.ORINBAEV> Mısal 1 private void displayAddress(){ System.out.println("Address: "+address); } protected void displayPhone(){ System.out.println("Phone: "+phone); } } public class Program{ public static void main(String[] args) { Person anna = new Person("Anna", 23, "Nukus", "+12334567"); anna.displayName(); // isleydi, metod public anna.displayAge(); // isleydi, metod default modifikator anna.displayPhone(); // isleydi, metod protected anna.displayAddress(); // qáte!, metod private </TITUNF></PI></PROGRAMMALASTIRIW></A.B.ORINBAEV> Mısal 1 System.out.println(anna.name); System.out.println(anna.address); System.out.println(anna.age); System.out.println(anna.phone); // // // // isleydi, default modifikator isleydi, public isleydi, protected qáte!, private } } Bunda maydanlardan phone maydanınan basqa hámmesi isleydi. Sebebi, phone maydanınıń bir ózi private (jabıq) modifikatorına iye. Al metodlardan displayAddress metodın basqa klass ishinde shaqırıp bolmaydı. Sebebi, modifikatorı private. </TITUNF></PI></PROGRAMMALASTIRIW></A.B.ORINBAEV> Inkapsulyaciya Soraw payda boladı, ne ushın barlıq maydanlar hám metodlardı public modifikatorı menen táriyplep, barlıq klasslar ushın ashıq etip paydalanıwǵa bolmaydı ma? Eger basqa klass tuwrıdan-tuwrı maydandı ózgertetuǵın bolsa, programma islewi dawamında korrektli emes mánis jiberiwi múmkin. Máselen, adam jası ushın teris san. Hár qiylı modifikatorlardı kerekli jerinde paydalanıw, programmanıń durıs islewine alıp keledi. Bul modifikatorlardan paydalanıp kóriniwsheńlik oblastin ózgertiw inkapsulyaciya delinedi. public class Program{ public static void main(String[] args) { Person anna = new Person("Anna", 23); System.out.println(anna.getAge()); anna.setAge(25); System.out.println(anna.getAge()); anna.setAge(123456); System.out.println(anna.getAge()); } } // 23 // 25 // 25 </TITUNF></PI></PROGRAMMALASTIRIW></A.B.ORINBAEV> Mısal 2 class Person{ private String name; private int age; public Person(String name, int age){ this.name = name; this.age = age; } public String getName(){ return this.name; } public void setName(String name){ this.name = name; } public int getAge(){ return this.age; } public void setAge(int age){ if(age > 0 && age < 110) this.age = age; } } </TITUNF></PI></PROGRAMMALASTIRIW></A.B.ORINBAEV> Statikalıq maydanlar, metodlar hám konstantalar Javada ápiwayı maydanlar, metodlardan basqa statikalıq maydanlar, metodlar bar. Máselen, tiykarǵı main metodı statikalıq metod esaplanadı. public static void main(String[] args) { } Statikalıq maydanlar, metodlardı táriyplewde static gilt sózi isletiledi. Statikalıq emes maydanlarda klasslardıń obyektlerin jaratıw waqtında hár bir obyekttiń óziniń nusqası jaratıladı, al statikalıq maydanlarda bir klass ushın ulıwma jaratıladı. Statikalıq maydanlar hám metodlardan paydanlanıw waqtında klass obyektin jaratpay turıpta isletiw múmkin. </TITUNF></PI></PROGRAMMALASTIRIW></A.B.ORINBAEV> Mısal 3 public class Program{ public static void main(String[] args) { Person tom = new Person(); Person bob = new Person(); tom.displayId(); // Id = 1 bob.displayId(); // Id = 2 System.out.println(Person.esaplagish); // 3 // esaplaǵıshtı ózgertemiz Person.esaplagish = 8; Person sam = new Person(); sam.displayId(); // Id = 8 } } </TITUNF></PI></PROGRAMMALASTIRIW></A.B.ORINBAEV> Mısal 3 class Person{ private int id; static int esaplagish=1; Person(){ id = esaplagish++; } public void displayId(){ System.out.println("Id: "+id); } } </TITUNF></PI></PROGRAMMALASTIRIW></A.B.ORINBAEV> Mısal 4 public class Program{ public static void main(String[] args) { Person.displayCounter(); // Counter: 1 Person tom = new Person(); Person bob = new Person(); Person.displayCounter(); // Counter: 3 } } class Person{ private int id; private static int counter = 1; Person(){ id = counter++; } // statikaliq metod public static void displayCounter(){ System.out.println("Counter: "+counter); } public void displayId(){ System.out.println("Id: "+id); } } </TITUNF></PI></PROGRAMMALASTIRIW></A.B.ORINBAEV> Mısal 5 Klass ishindegi statikalıq maydanlar hám metodlardan klass obyektin jaratpastan turıp paydalanıwǵa boladı. public class Program{ public static void main(String[] args) { System.out.println(Amel.qosiw(9, 12)); System.out.println(Amel.aliw(9, 12)); System.out.println(Amel.kobeytiw(9, 12)); } } class Amel{ static int qosiw(int x, int y){ return x + y; } static int aliw(int x, int y){ return x - y; } static int kobeytiw(int x, int y){ return x * y; } } // 21 // -3 // 108 </TITUNF></PI></PROGRAMMALASTIRIW></A.B.ORINBAEV> Final gilt sózi Ózgeriwshilerdiń aldına final gilt sózi jazılsa, olar konstantaǵa aylanatuǵını sizge málim. Mısalı, final double PI = 3.14; Eger metod aldına final gilt sózi jazılsa, onda bul metodtı basqa miyrasxor klasslarda qayta jazıp bolmaydı. Yaǵnıy palimorfizm islew múmkinshiligin bermeydi. Mısalı, public final void metod(){ } Eger final gilt sózi klass aldına jazılsa, onda bunda klasslardıń miyrasxor klası bolmaydı. Mısalı, public final MyClass{ } </TITUNF></PI></PROGRAMMALASTIRIW></A.B.ORINBAEV> Tákirarlaw sorawları Modifikator degenimiz ne? Modifikatorlardıń qanday túrleri bar? public penen protected modifikatorlarınıń parqı qanday? Statikalıq maydanlar hám metodlardıń ápiwayılardan parqı nede? Eger klass aldına final gilt sózi jazılsa, klass qalay ózgeredi?