Sobes.tech
Junior

Java'da qanday sinf turlari mavjud?

sobes.tech AI

AIdan javob

Java'da quyidagi asosiy sinf turlari mavjud:

  1. Standart Sinf (Standard Class)

    • Maydonlar, metodlar, konstruktorlar bo'lishi mumkin.
    • final deb e'lon qilinmagan bo'lsa, boshqa sinflar tomonidan meros olishi mumkin.
    • Interfeyslarni amalga oshirishi mumkin.
    • Erişim modifikatorlari (public, protected, default, private) bilan e'lon qilinadi.
  2. Abstrakt Sinf (Abstract Class)

    • abstract kalit so'zi bilan e'lon qilinadi.
    • To'g'ridan-to'g'ri instansiya qilinmaydi.
    • Abstrakt metodlar (implementatsiyasiz) va oddiy metodlar bo'lishi mumkin.
    • Meros olish uchun mo'ljallangan; subklasslar abstrakt metodlarning implementatsiyasini taqdim etishi kerak.
    // Rasm uchun abstrakt sinf
    abstract class Shape {
        abstract double area(); // Maydon hisoblash uchun abstrakt metod
    
        void display() { // Oddiy metod
            System.out.println("This is a shape.");
        }
    }
    
  3. Final Sinf (Final Class)

    • final kalit so'zi bilan e'lon qilinadi.
    • Boshqa sinflar tomonidan meros olinmaydi.
    • Sinfni kengaytirishni oldini olish, xavfsizlikni ta'minlash yoki o'zgarmaslikni kafolatlash uchun ishlatiladi.
    // Meros olinmaydigan final sinf
    final class ImmutableString {
        private final String value;
    
        public ImmutableString(String value) {
            this.value = value;
        }
    
        public String getValue() {
            return value;
        }
    }
    
  4. Enumlar (Enum)

    • Aniq belgilangan konstantalar to'plamini ifodalash uchun mo'ljallangan maxsus sinf turi.
    • enum kalit so'zi bilan e'lon qilinadi.
    • Enum konstantalari odatda public static final bo'lib, default qiymatga ega.
    • Maydonlar, metodlar va konstruktorlar (yashirin private) bo'lishi mumkin.
    // Haftaning kunlari uchun enum
    enum DayOfWeek {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
    
  5. Noma'lum sinflar (Anonymous Class)

    • Nomli sinf, bir vaqtning o'zida yaratiladi va instansiya qilinadi.
    • Ko'pincha interfeyslarni amalga oshirish yoki sinflarni "yashirin" tarzda kengaytirish uchun ishlatiladi, faqat bir marta foydalanish uchun.
    • Aniq konstruktorlar bo'lishi mumkin emas.
    // Runnable ni amalga oshiruvchi noma'lum sinf yaratish
    Runnable r = new Runnable() {
        @Override
        public void run() {
            System.out.println("Running in an anonymous class.");
        }
    };
    
  6. Ichki sinflar (Nested Class)

    • Boshqa sinf ichida e'lon qilingan sinflar.
    • Ikki turga bo'linadi:
      • Statik ichki sinflar (Static Nested Class): static bilan e'lon qilinadi. Tashqi sinfning statik bo'lmagan a'zolariga to'g'ridan-to'g'ri kirishmaydi. Oddiy sinflar kabi instansiya qilinadi.
      • Ichki sinflar (Inner Class): static bilan e'lon qilinmaydi. Tashqi sinfning barcha a'zolariga, jumladan private, kirish huquqiga ega. O'z instansiyasini yaratish uchun tashqi sinfning nusxasi kerak.
    // Tashqi sinf
    class OuterClass {
        private String outerField = "Outer";
    
        // Statik ichki sinf
        static class StaticNestedClass {
            void display() {
                System.out.println("Inside StaticNestedClass.");
                // outerField ga to'g'ridan-to'g'ri kirish yo'q
            }
        }
    
        // Ichki sinf
        class InnerClass {
            void display() {
                System.out.println("Inside InnerClass. outerField: " + outerField); // outerField ga kirish
            }
        }
    }
    
  7. Rekord sinflar (Record - Java 14 va undan keyingi versiyalar)

    • record kalit so'zi bilan e'lon qilinadi.
    • Ma'lumotlarni saqlash uchun mo'ljallangan. Kompilyator avtomatik ravishda konstruktor, kirish metodlari (accessor methods), equals(), hashCode() va toString() ni generatsiya qiladi.
    • Record maydonlari avtomatik ravishda final bo'ladi.
    // 2D makonda nuqtani ifodalovchi rekord
    record Point(int x, int y) {
        // Kompilyator konstruktor, x(), y(), equals(), hashCode(), toString() metodlarini generatsiya qiladi
    }