Sobes.tech
Junior

Ce tipuri de clase există în Java?

sobes.tech AI

Răspuns de la AI

  • Clase normale (regular / concretă): Pot fi instanțiate, conțin câmpuri, metode, constructori.
  • Clase abstracte: Nu pot fi instanțiate direct. Pot conține metode abstracte (fără implementare) și metode obișnuite. Sunt folosite pentru a defini caracteristici comune pentru subclase.
    abstract class AbstractClass {
        abstract void abstractMethod(); // Metodă abstractă
        void regularMethod() {
            System.out.println("Metodă obișnuită");
        }
    }
    
  • Clase încorporate (nested classes): Sunt declarate în interiorul altei clase. Pot fi:
    • Clase încorporate statice (static nested classes): Nu au acces la membrii non-statice ai clasei exterioare. Sunt create fără o instanță a clasei exterioare.
      class OuterClass {
          static class StaticNestedClass {
              // ...
          }
      }
      
    • Clase interne (inner classes): Au acces la toți membrii clasei exterioare (inclusiv cei privați). Sunt legate de o instanță a clasei exterioare.
      class OuterClass {
          class InnerClass {
              // Are acces la membrii OuterClass
          }
      }
      
    • Clase locale (local classes): Sunt declarate în interiorul unei metode, bucle sau bloc if. Accesul lor este limitat la aria lor de declarare.
      class OuterClass {
          void someMethod() {
              class LocalClass {
                  // Declarată local
              }
              LocalClass obj = new LocalClass();
          }
      }
      
    • Clase anonime (anonymous classes): Fără nume, sunt create simultan cu declarația sau instanțierea. Sunt folosite pentru utilizare unică.
      interface MyInterface {
          void myMethod();
      }
      
      MyInterface anon = new MyInterface() {
          @Override
          public void myMethod() {
              System.out.println("Clasă anonimă");
          }
      };
      
  • Clase înregistrare (records) (din Java 14): Sintaxă compactă pentru declararea claselor imuabile destinate stocării datelor (POJO).
    record Person(String name, int age) {
        // Constructor, getters, equals(), hashCode(), toString() generate automat
    }