maxsus joylar, nuqta belgisi, qabul qiluvchi setter usuli

Java haqida ba'zi asosiy tushunchalarni so'raganingiz uchun uzr.

Sinf ichidagi xususiy joylarga qanday qilib kirish mumkinligi haqida chalkashliklar bor.

Masalan, men sinfni aniqladim:

private class Example{
private  Timestamp fromdate;
private  Timestamp todate;
private  float amount;
public example(Timestamp fromdate, Timestamp todate, float amount){
  this.fromdate= fromdate;
  this.todate= todate;
  this.amount = amount;
}}

Masalan, yangi misol sinf yaratish uchun konstruktordan foydalanmoqchiman

example ex = new example (fromdate, todate, amount)

Ex o'zgaruvchilar uchun e'lon qilingan maxsus maydonlarga faqatgina kirishim mumkin

ex.fromdate, ex.todate, ex.amount?

Nega va nima uchun ob'ektda o'zgaruvchilarni qabul qilish uchun qabul qiluvchi va sozlash usulini e'lon qilishimiz kerak va biz to'g'ridan-to'g'ri nuqta belgilarini sinf ichidagi maydonlarni olish uchun ishlatishimiz mumkin?

katta rahmat

--------------------------- EDIT ---------------------- ----------------

Yana bir savol bolalari,

Yuqoridagi sinfni boshqa sinfga qo'shsam, maxsus joylarni olish uchun bevosita nuqta belgisini ishlatishim mumkinmi?

misol uchun:

public class ExampleOutterClass{
   private class Example(...){...}
   ---Some Operation to get fromdate, todate, amount)---
   Example ex = new Example (fromdate, todate, amount);
   public Timestamp fromdate = ex.fromdate;
   public Timestamp todate = ex.todate;
   public float amount = ex.amount;
}

Men yuqoridagi amaliyotni Jbuilder-da (juda eski ishlab chiquvchi ORZ) ishlayapman va shuning uchun men ushbu savolni ko'tarish uchun nuqta belgilarini to'g'ridan-to'g'ri xususiy joylarga murojaat qilishim uchun g'alati deb topdim.

BTW Albatta yordam uchun rahmat

0
Java kodlash konventsiyalari sizning sinf nomlaringiz katta harflar bilan bosh harflar va o'zgaruvchilar bilan boshlash kerakligini aytadi. Shunday qilib, sinf nomi Example bo'lishi kerak va o'qish va tushunish osonroq. :)
qo'shib qo'ydi muallif Sufian, manba
Ichki kurslar tashqi kursdagilarning to'liq a'zolari emas, lekin ular juda o'xshash. Foydalanuvchilar kabi boshqa a'zolarga ham kirishlari mumkin (har qanday usul boshqa, hatto bir xil sinfda e'lon qilingan maxsus usulni ham taklif qilishi mumkin) ichki sinflar barcha boshqa a'zolar bilan bog'lanishlari va ularga kirishlari mumkin.
qo'shib qo'ydi muallif Pshemo, manba
Sizning konstruktoringiz yaxshi ko'rinadi. private bo'lishi fikri shundan iboratki, emas, balki ga kirishingiz mumkin. Sizning sinfingizning ichki ishlarini yashirish odatda talab qilinadi.
qo'shib qo'ydi muallif Scary Wombat, manba

6 javoblar

Xususiy joylar aniqlangan sinfdan tashqarida mavjud emas. Ushbu maydonchalarga kirish uchun siz buning o'rniga getter yoki setter usullarini yaratishingiz mumkin. Getter va setter usullari odatda faqat maxsus a'zodan o'qilishi yoki a'zolarning qiymatini belgilashni istasangiz, ammo o'qimaslik kerakligida ishlatiladi.

Setter va getter metodlari odatda modifikatsiya qilishni xohlaganingizda yoki uni qaytarishdan avval qiymatni ishlatishingizda ham ishlatiladi. Ravi, a'zolarni o'zgarmaydigan jamoatchilik qilish o'rniga, nima uchun getter va setter usullaridan foydalanishga katta javob berdi.

1
qo'shib qo'ydi

Yo'q, sinfning maxsus a'zolariga sinfingizdan tashqaridagi ob'ektdan bevosita kira olmaysiz. Xususiy a'zolarga faqat bitta sinfdagi funktsiyalar orqali kirish mumkin. Getters va Setters ushbu qiymatlarni olgan yoki o'rnatadigan jamoat usullari sifatida yaratilgan. Boshqa sinflar, ushbu a'zolarni va maxsus foydalanuvchilarni o'zgartirish uchun foydalanishi kerak.

One question you may have is :Why do we need getters and setters when you can make the variable public itself and then access it from another class? Please follow this question for that : Why use getters and setters?

1
qo'shib qo'ydi
keyinchalik ikki nusxada belgisi bo'lishi kerak
qo'shib qo'ydi muallif Scary Wombat, manba

sinfdan tashqarida maxsus maydonlarga kirishga ruxsat etilmagan, Buning uchun siz uni qabul qilish va sozlashni e'lon qilishingiz kerak.

1
qo'shib qo'ydi

Sinfning istalgan shaxsiy a'zosi (maydon, usuli) ga kirishga ruxsat berilmaydi.

Agar siz o'z sinfingizning maxsus a'zolaridan foydalanishni nazorat qilishingiz kerak bo'lsa, siz ularni xususiy deb e'lon qilishingiz va sinf misollarini boshqarish usullarini taqdim etishingiz kerak.

Xususiy a'zolarga kirishni nazorat qilishning bir usuli - bu hisob-kitoblarni belgilash va qabul qiluvchilarni aniqlashdir. Biroq, bu holatda siz baribir har bir ob'ektning ichki holatini o'zgartirishga ruxsat berasiz. Misol uchun:

public class Point {
  private double x;
  private double y;
  public Point(double x, double y) {
    this.x = x;
    this.y = y;
  }
  public void setX(double x) {
    this.x = x;
  }
  public double getX() {
    return x;
  }
 //... setter and getter for y
}

Boshqa usul esa, boshqalar tomonidan ishlatilishi mumkin bo'lgan yaxshi APIni aniqlashdir. Bunday holda, faqat o'z sinfingiz ichki holatini o'zgartirishi mumkin. Misol uchun:

public class Point {
  private double x;
  private double y;
  public Point(double x, double y) {
    this.x = x;
    this.y = y;
  }
  public void move(double deltaX, double deltaY) {
   //some validations can be applied here
    x += deltaX;
    y += deltaY
  }
}
0
qo'shib qo'ydi

Sinfning istalgan shaxsiy a'zosi (maydon, usuli) ga kirishga ruxsat berilmaydi.

Agar siz o'z sinfingizning maxsus a'zolaridan foydalanishni nazorat qilishingiz kerak bo'lsa, siz ularni xususiy deb e'lon qilishingiz va sinf misollarini boshqarish usullarini taqdim etishingiz kerak.

Xususiy a'zolarga kirishni nazorat qilishning bir usuli - bu hisob-kitoblarni belgilash va qabul qiluvchilarni aniqlashdir. Biroq, bu holatda siz baribir har bir ob'ektning ichki holatini o'zgartirishga ruxsat berasiz. Misol uchun:

public class Point {
  private double x;
  private double y;
  public Point(double x, double y) {
    this.x = x;
    this.y = y;
  }
  public void setX(double x) {
    this.x = x;
  }
  public double getX() {
    return x;
  }
 //... setter and getter for y
}

Boshqa usul esa, boshqalar tomonidan ishlatilishi mumkin bo'lgan yaxshi APIni aniqlashdir. Bunday holda, faqat o'z sinfingiz ichki holatini o'zgartirishi mumkin. Misol uchun:

public class Point {
  private double x;
  private double y;
  public Point(double x, double y) {
    this.x = x;
    this.y = y;
  }
  public void move(double deltaX, double deltaY) {
   //some validations can be applied here
    x += deltaX;
    y += deltaY
  }
}
0
qo'shib qo'ydi

Xususiy ob'ektlar sinfdan tashqariga chiqa olmaydi. Quyidagilarga kirishingiz mumkin emas:

ex.fromdate, ex.todate, ex.amount

Technically, you can make them public and use dot notation to get what you want conveniently . Why are we use "getter" and "setter" ? you may think they are two common methods that most program accept and they can retrict you access the class member regularly. And the most important , is useful in the some design patten. You can learn more about Javabean about setter and getter.https://en.wikipedia.org/wiki/JavaBeans

0
qo'shib qo'ydi