Junior
Какви типове класове съществуват в Java?
sobes.tech AI
Отговор от AI
В Java съществуват следните основни типове класове:
-
Стандартен клас (Standard Class)
- Може да съдържа полета, методи, конструктори.
- Може да бъде наследен от други класове, ако не е обявен като
final. - Може да реализира интерфейси.
- Обявява се с модификатори за достъп (
public,protected,default,private).
-
Абстрактен клас (Abstract Class)
- Обявява се с ключовата дума
abstract. - Не може да бъде директно инстанциран.
- Може да съдържа абстрактни методи (без реализация) и обикновени методи.
- Предназначен за наследяване; подкласовете трябва да предоставят реализация на абстрактните методи.
// Абстрактен клас за фигура abstract class Shape { abstract double area(); // Абстрактен метод за изчисляване на площ void display() { // Обикновен метод System.out.println("Това е фигура."); } } - Обявява се с ключовата дума
-
Финален клас (Final Class)
- Обявява се с ключовата дума
final. - Не може да бъде наследен от други класове.
- Използва се за предотвратяване на разширяване на класа, осигуряване на безопасност или неизменност на реализацията.
// Финален клас, който не може да бъде наследен final class ImmutableString { private final String value; public ImmutableString(String value) { this.value = value; } public String getValue() { return value; } } - Обявява се с ключовата дума
-
Enum (Енум)
- Специален тип клас, предназначен за представяне на фиксиран набор от константи.
- Обявява се с ключовата дума
enum. - Константите на енум по подразбиране са
public static final. - Могат да имат полета, методи и конструктори (с скрит модификатор
private).
// Енум за дните от седмицата enum DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } -
Анонимни класове (Anonymous Class)
- Клас без име, който се създава и инстанцира едновременно.
- Често се използва за реализиране на интерфейси или разширяване на класове "на лету", когато е необходима еднократна употреба.
- Не могат да имат явни конструктори.
// Създаване на анонимен клас, реализиращ интерфейса Runnable Runnable r = new Runnable() { @Override public void run() { System.out.println("Изпълнява се в анонимен клас."); } }; -
Вложени класове (Nested Class)
- Класове, обявени вътре в друг клас.
- Има два типа:
- Статични вложени класове (Static Nested Class): обявяват се с
static. Нямат достъп до нестатичните членове на външния клас директно. Инстанцират се като обикновени класове. - Вътрешни класове (Inner Class): не се обявяват като
static. Имат достъп до всички членове на външния клас, включителноprivate. Изискват екземпляр на външния клас за създаването им.
- Статични вложени класове (Static Nested Class): обявяват се с
// Външен клас class OuterClass { private String outerField = "Outer"; // Статичен вложен клас static class StaticNestedClass { void display() { System.out.println("Вътре в StaticNestedClass."); // Няма директен достъп до outerField } } // Вътрешен клас class InnerClass { void display() { System.out.println("Вътре в InnerClass. outerField: " + outerField); // Достъп до outerField } } } -
Записи (Record - от Java 14)
- Обявяват се с ключовата дума
record. - Предназначени за съхранение на данни. Компилаторът автоматично генерира конструктора, методите за достъп (
accessor methods),equals(),hashCode()иtoString(). - Полетата на записа са неявно
final.
// Запис за представяне на точка в 2D пространство record Point(int x, int y) { // Компилаторът ще генерира конструктора, методите x(), y(), equals(), hashCode(), toString() } - Обявяват се с ключовата дума