Sobes.tech
Junior — Middle

Кадом компонентҳо метавонанд дар синфи абстрактӣ бошанд, аммо дар интерфейс манъ шудаанд?

sobes.tech AI

Ҷавоб аз AI

Дар класи абстракт дар Java метавонанд компонентҳои зеринро дошта бошанд, ки дар интерфейс (хусусан дар версияҳои классикии Java то Java 8) манъ шудаанд:

  • Майдони бо ҳолат (вариаблҳои намуна) — класи абстракт метавонад майдонҳо бо арзишҳои мушаххас дошта бошад, дар ҳоле ки интерфейс наметавонад майдонҳои ғайри статикӣ дошта бошад.
  • Конструкторҳо — класи абстракт метавонад конструкторҳо барои оғоз кардани ҳолат дошта бошад, интерфейсҳо конструктор надоранд.
  • Методҳо бо амалишавӣ (то Java 8) — қаблан, интерфейсҳо танҳо метавонистанд методҳои абстрактӣ дошта бошанд, дар ҳоле ки класи абстракт метавонанд ҳам методҳои абстрактӣ ва ҳам конкретӣ дошта бошанд.

Аз Java 8 ба баъд, интерфейсҳо метавонанд методҳои пешфарзӣ (default) ва статикӣ бо амалишавӣ дошта бошанд, аммо ҳанӯз ҳам наметавонанд майдонҳои ғайри статикӣ ва конструкторҳоро дошта бошанд.

Масалан, дар класи абстракт бо майдон ва конструктор:

public abstract class Animal {
    protected String name; // майдон

    public Animal(String name) { // конструктор
        this.name = name;
    }

    public abstract void makeSound();

    public void printName() { // методи конкретӣ
        System.out.println("Name: " + name);
    }
}