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("This is a shape."); } } - Обявяват се с ключовата дума
-
Финални (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("Running in an anonymous class."); } }; -
Вложени (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("Inside StaticNestedClass."); // Няма директен достъп до outerField } } // Вътрешен клас class InnerClass { void display() { System.out.println("Inside 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() } - Обявяват се с ключовата дума