Java | Вопросы собесов – Telegram
Java | Вопросы собесов
11.4K subscribers
34 photos
2 videos
1.13K links
Download Telegram
🤔 Какой тип исключения является потомком класса Error?
Anonymous Quiz
30%
RuntimeException
12%
IOException
56%
StackOverflowError
2%
SQLException
😁21👍2
🤔 Как мы можем обеспечить transport layer security для нашего веб приложения?

Чтобы обеспечить Transport Layer Security (TLS) для вашего веб-приложения, вам нужно настроить HTTPS, что включает использование SSL/TLS сертификатов. Вот шаги для настройки TLS:

🚩Шаги для настройки TLS:

🟠Получите SSL/TLS сертификат:
Можно получить сертификат от сертификационного центра (CA) или использовать бесплатный сертификат от Let's Encrypt.
🟠Настройте ваш сервер для использования HTTPS:
Настройка зависит от используемого веб-сервера (Apache, Nginx, Tomcat и т.д.).

🚩Пример настройки для Nginx:

1⃣Установка и настройка SSL: Скопируйте ваш сертификат и ключ в директорию:
sudo mkdir /etc/nginx/ssl
sudo cp /path/to/your_domain_name.crt /etc/nginx/ssl/
sudo cp /path/to/your_private.key /etc/nginx/ssl/


2⃣Настройте виртуальный хост для HTTPS: Добавьте в файл конфигурации Nginx (например, в /etc/nginx/sites-available/default):
server {
listen 80;
server_name your_domain_name;
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl;
server_name your_domain_name;

ssl_certificate /etc/nginx/ssl/your_domain_name.crt;
ssl_certificate_key /etc/nginx/ssl/your_private.key;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;

location / {
root /var/www/html;
index index.html index.htm;
}
}


3⃣Перезапустите Nginx:
sudo systemctl restart nginx


🚩Пример настройки для Tomcat:

1⃣Установка и настройка SSL: Создайте и установите SSL сертификат в Tomcat: Импортируйте сертификат в Java Keystore (если у вас его нет, создайте его):
keytool -import -alias tomcat -file your_domain_name.crt -keystore /path/to/your_keystore.jks


2⃣Настройте файл server.xml: Добавьте следующий блок в файл server.xml (например, в /usr/local/tomcat/conf/server.xml):
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="/path/to/your_keystore.jks"
type="RSA" />
</SSLHostConfig>
</Connector>


3⃣Перезапустите Tomcat:
sudo systemctl restart tomcat


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101
🤔 Как организовать подключение к базе данных, обеспечить журналирование в сервлете?

1⃣Добавьте зависимости в pom.xml:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>


2⃣Подключение к базе данных в сервлете:
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DatabaseServlet extends HttpServlet {
private static final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase";
private static final String USER = "root";
private static final String PASS = "password";

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT id, name FROM Users")) {
while (rs.next()) {
response.getWriter().println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
}
} catch (Exception e) {
e.printStackTrace(response.getWriter());
}
}
}


🚩Журналирование (логирование):

1⃣Добавьте зависимости в pom.xml:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>


2⃣Файл конфигурации log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %c{1} - %msg%n"/>
</Console>
<File name="File" fileName="logs/app.log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %c{1} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>


3⃣Использование логгера в сервлете:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class LoggingServlet extends HttpServlet {
private static final Logger logger = LogManager.getLogger(LoggingServlet.class);

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
logger.info("Processing GET request");
response.getWriter().println("Check the logs for output");
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤔 Какой интерфейс используется для выполнения операций ввода-вывода с символами?
Anonymous Quiz
19%
InputStream
8%
OutputStream
49%
Reader
24%
ByteStream
👍5🤯5
🤔 Какие основные особенности появились в спецификации Servlet 3?

🟠Аннотации для конфигурации:
Упрощенная настройка сервлетов, фильтров и слушателей без web.xml. Примеры: @WebServlet, @WebFilter, @WebListener.

🟠Асинхронная обработка:
Позволяет сервлетам обрабатывать запросы асинхронно. Пример: request.startAsync().

🟠Динамическое добавление компонентов:
Программное добавление сервлетов, фильтров и слушателей. Пример: ServletContext.addServlet().

🟠Поддержка загрузки файлов:
Встроенная поддержка для загрузки файлов через сервлеты. Пример: @MultipartConfig.

🟠Улучшения безопасности:
Объявление ролей и разрешений в аннотациях. Пример: @DeclareRoles, @RolesAllowed.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👀1
🤔 Какой из следующих интерфейсов предоставляет методы для работы с последовательностями символов?
Anonymous Quiz
2%
Appendable
8%
Readable
68%
CharSequence
22%
StringBuilder
😁8👍1
🤔 Какие способы аутентификации доступны сервлету?

🟠Basic Authentication:
Отправка имени пользователя и пароля в Base64. Конфигурация в web.xml:
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Protected Area</realm-name>
</login-config>


🟠Digest Authentication:
Хеширование учетных данных для безопасности. Конфигурация в web.xml:
<login-config>
<auth-method>DIGEST</auth-method>
<realm-name>Protected Area</realm-name>
</login-config>


🟠Form-based Authentication:
Использование HTML-форм для ввода учетных данных. Конфигурация в web.xml:
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>


🟠Client Certificate Authentication:
Использование клиентских SSL-сертификатов. Конфигурация в web.xml:
<login-config>
<auth-method>CLIENT-CERT</auth-method>
</login-config>


🟠Custom Authentication:
Реализация собственной логики через сервлеты и фильтры. Пример фильтра:
public class AuthenticationFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpSession session = httpRequest.getSession(false);
if (session != null && session.getAttribute("user") != null) {
chain.doFilter(request, response);
} else {
httpRequest.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🤯21
🤔 Что такое ООП?

ООП (Объектно-Ориентированное Программирование) — это парадигма программирования, основанная на концепции объектов, которые содержат данные и методы для их обработки. Основными принципами ООП являются инкапсуляция, наследование, полиморфизм и абстракция. ООП помогает создавать гибкие, расширяемые и модульные программы. В Java все элементы программирования реализованы через объекты и классы, что делает её строго объектно-ориентированным языком.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
16👍9👀2🤔1
🤔 Что такое Java Server Pages JSP?

Java Server Pages (JSP) — это технология для создания динамических веб-страниц с использованием Java. JSP позволяет смешивать HTML с Java-кодом для генерации динамического контента на сервере.

🚩Плюсы:

Интеграция с Java:
Вставка Java-кода в HTML-страницы.

Теги JSP:
Скриплеты: <% ... %>
Выражения: <%= ... %>
Директивы: <%@ ... %>
Декларации: <%! ... %>

JavaBeans:
Поддержка использования JavaBeans для разделения логики и представления.

Пользовательские теги:
Расширение функциональности через собственные теги.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🎉1👾1
🤔 В чем разница между checked и unchecked исключениями?

Checked исключения — это исключения, которые проверяются во время компиляции, и разработчик обязан обработать их с помощью try-catch или указать в сигнатуре метода с помощью throws. Unchecked исключения не проверяются на этапе компиляции и возникают в результате ошибок времени выполнения (например, NullPointerException). Checked исключения происходят из класса Exception, а unchecked — из класса RuntimeException. Checked исключения обычно используются для предсказуемых ошибок, которые можно обработать.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай
📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🔥2
🤔 Зачем нужен JSP?

JSP (JavaServer Pages) используется для создания динамических веб-страниц с помощью Java. Он позволяет внедрять Java-код прямо в HTML, упрощая генерацию контента на стороне сервера, например, для обработки форм, взаимодействия с базами данных и динамического отображения информации. JSP удобно использовать в проектах на Java для интеграции логики приложения с пользовательским интерфейсом.

🚩Основные причины использования:

🟠Создание динамического контента:
JSP позволяет генерировать HTML-код динамически на основе данных и логики, определенной на сервере. Это означает, что содержание веб-страницы может изменяться в зависимости от запросов пользователя, данных из базы данных или других факторов.

🟠Легкость интеграции с Java:
JSP тесно интегрирован с Java, что позволяет использовать все возможности Java в веб-приложениях. Разработчики могут использовать существующие Java-классы и библиотеки, что ускоряет разработку и уменьшает количество кода.

🟠Отделение логики от представления:
С помощью JSP можно отделить бизнес-логику от презентационного слоя. Логика может быть реализована в сервлетах или JavaBeans, а JSP используется для отображения данных. Это упрощает поддержку и развитие приложения.

🟠Поддержка MVC архитектуры:
JSP хорошо интегрируется с Model-View-Controller (MVC) архитектурой. JSP используется для представления (View), сервлеты или контроллеры обрабатывают запросы (Controller), а бизнес-логика и данные находятся в моделях (Model).

🟠Легкость использования и обучения:
Разработчики, знакомые с HTML, могут легко начать использовать JSP, добавляя динамическое содержимое с помощью Java. Это снижает порог входа для создания динамических веб-страниц.

🟠Поддержка тегов и библиотек тегов:
JSP поддерживает стандартные теги JSP (например, скриплеты, выражения) и позволяет создавать собственные теги. Это помогает повторно использовать код и упрощает создание сложных страниц.

🚩Примеры использования JSP:

Простой JSP файл
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<noscript>Example JSP</noscript>
</head>
<body>
<h1>Welcome to JSP</h1>
<p>The current date and time is: <%= new java.util.Date() %></p>
</body>
</html>


Использование JavaBeans в JSP
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="com.example.User" %>
<html>
<head>
<noscript>Example JSP with JavaBean</noscript>
</head>
<body>
<jsp:useBean id="user" class="com.example.User" scope="session"/>
<jsp:setProperty name="user" property="name" value="John Doe"/>
<h1>Welcome, <jsp:getProperty name="user" property="name"/>!</h1>
</body>
</html>


🚩Плюсы:

Производительность:
JSP страницы компилируются в сервлеты и могут быть кэшированы сервером, что улучшает производительность по сравнению с традиционными CGI-скриптами.
Расширяемость:
JSP позволяет использовать кастомные теги и таглайбы, что делает код более чистым и повторно используемым.
Поддержка большого количества библиотек и фреймворков:
JSP интегрируется с различными библиотеками и фреймворками, такими как JSTL (JSP Standard Tag Library), что делает разработку более мощной и удобной.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 Какие методы в классе Object знаешь?

Класс Object является родительским для всех классов в Java и включает несколько ключевых методов: `toString()`, который возвращает строковое представление объекта, `equals()` для сравнения объектов, и `hashCode()` для получения хеш-кода объекта. Также есть методы `clone()`, который создает копию объекта, и `finalize()`, вызываемый перед сборкой мусора. Другие методы включают `getClass()` для получения информации о классе и `wait()`, `notify()`, и `notifyAll()` для управления потоками.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥21
🤔 Опиши, как обрабатываются JSP страницы, начиная от запроса к серверу, заканчивая ответом пользователю?

1⃣Запрос к серверу:
Пользователь отправляет HTTP-запрос к серверу, запрашивая JSP страницу.

2⃣Перенаправление к контейнеру сервлетов:
Веб-сервер перенаправляет запрос к контейнеру сервлетов (например, Tomcat).

3⃣Проверка и компиляция:
Контейнер проверяет, была ли JSP страница изменена. Если изменена или запрашивается впервые, JSP компилируется в сервлет (Java-код).

4⃣Инициализация сервлета:
Скомпилированный сервлет загружается и инициализируется.

5⃣Обработка запроса:
Метод service() сервлета обрабатывает HTTP-запрос. Java-код в JSP выполняется, генерируя HTML.

6⃣Отправка ответа пользователю:
Сгенерированный HTML отправляется обратно клиенту (браузеру).

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
🤔 Что такое SOLID?

SOLID — это набор пяти принципов объектно-ориентированного программирования, предназначенных для создания гибких и поддерживаемых систем. Эти принципы включают: Single Responsibility (единственная ответственность), Open/Closed (открытость для расширения, закрытость для изменений), Liskov Substitution (замещение Лисков), Interface Segregation (разделение интерфейсов) и Dependency Inversion (инверсия зависимостей). Соблюдение этих принципов позволяет улучшить структуру и читаемость кода.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34👀1
🤔 Какие типы EL операторов знаешь?

В Java EL (Expression Language) операторы можно классифицировать на несколько типов в зависимости от их функциональности.

🚩Основные типы

🟠Арифметические операторы
🟠Логические операторы
🟠Операторы сравнения
🟠Операторы условного выражения
🟠Операторы доступа к данным

🚩Арифметические операторы

+ (сложение)
- (вычитание)
* (умножение)
/ (деление)
% (остаток от деления)
${3 + 4} // результат: 7
${10 - 2} // результат: 8
${6 * 7} // результат: 42
${8 / 2} // результат: 4
${10 % 3} // результат: 1


🚩Логические операторы

&& (логическое И)
|| (логическое ИЛИ)
! (логическое НЕ)
${true && false} // результат: false
${true || false} // результат: true
${!true} // результат: false


🚩Операторы сравнения

== (равенство)
!= (неравенство)
< (меньше)
> (больше)
<= (меньше или равно)
>= (больше или равно)
${5 == 5} // результат: true
${5 != 4} // результат: true
${3 < 4} // результат: true
${7 > 6} // результат: true
${4 <= 4} // результат: true
${8 >= 8} // результат: true


🚩Операторы условного выражения

?: (тернарный оператор)
${(5 > 3) ? "Больше" : "Меньше"} // результат: "Больше"


🚩Операторы доступа к данным

. (точка) для доступа к свойствам и методам объекта
[] (квадратные скобки) для доступа к элементам массивов и коллекций
${user.name} // доступ к свойству name объекта user
${users[0]} // доступ к первому элементу массива или списка users


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👀42
🤔 Расскажи об иерархии коллекций в Java?

Иерархия коллекций в Java организована вокруг интерфейса Collection, который является базовым для всех коллекций. Основные его наследники — это List (например, ArrayList, LinkedList), Set (например, HashSet, TreeSet) и Queue (например, LinkedList, PriorityQueue). Все эти коллекции управляют группами объектов. Для работы с парами "ключ-значение" существует интерфейс Map (например, HashMap, TreeMap), который не является частью Collection, но тесно связан с ним.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥3👀1
🤔 Назови неявные, внутренние объекты JSP EL и их отличия от объектов JSP?

В JSP (JavaServer Pages) EL (Expression Language) предоставляет разработчикам простой способ доступа к данным и объектам в JSP-страницах. В JSP EL существуют несколько неявных, внутренних объектов, которые существенно облегчают работу с данными на серверной стороне. Вот основные из них и их отличия от стандартных JSP объектов:

🚩Основные

🟠pageContext
Этот объект предоставляет доступ к различным областям (scopes) JSP-страницы: page, request, session и application. pageContext используется для доступа к атрибутам и методам, которые относятся ко всей странице или конкретной области.
${pageContext.request.method}


🟠param
Этот объект представляет параметры запроса (HTTP request parameters). Каждый параметр запроса доступен как свойство. param используется для получения параметров формы или URL.
${param.username}


🟠paramValues
Похож на param, но представляет параметры как массив значений. paramValues используется для доступа к параметрам, у которых может быть несколько значений (например, checkbox).
${paramValues.options[0]}


🟠header
Этот объект представляет HTTP-заголовки запроса. Каждый заголовок доступен как свойство. header используется для получения значений заголовков HTTP-запроса.
${header["User-Agent"]}


🟠headerValues
Похож на header, но представляет заголовки как массив значений. headerValues используется для доступа к заголовкам с несколькими значениями.
${headerValues["Accept-Language"][0]}


🟠cookie
Этот объект представляет куки браузера. Каждый куки доступен как свойство. cookie используется для доступа к значениям куки.
${cookie["sessionID"].value}


🟠initParam
Этот объект представляет параметры инициализации (context initialization parameters) веб-приложения. initParam используется для доступа к параметрам инициализации, заданным в конфигурационном файле web.xml.
${initParam["databaseURL"]}


🟠pageScope, requestScope, sessionScope, applicationScope
Эти объекты представляют атрибуты соответствующих областей (scope) — страницы, запроса, сессии и приложения. Они используются для доступа к атрибутам, заданным в этих областях.
${sessionScope.user}


🚩Отличия от стандартных JSP объектов

🟠Упрощённый доступ:
EL предоставляет более удобный и краткий способ доступа к данным по сравнению с традиционными объектами JSP, такими как request, response, session и application.
🟠Обращение через свойства:
EL позволяет обращаться к атрибутам и параметрам как к свойствам, что упрощает синтаксис и делает код более читаемым.
🟠Без явного кастинга:
В JSP EL не требуется явное приведение типов, что упрощает работу с данными.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯5👍1
🤔 Как организована HashMap?

HashMap в Java использует хеш-таблицу для хранения пар ключ-значение. Ключи преобразуются в хеш-коды с помощью метода `hashCode()`, и на основе этих хеш-кодов определяется место хранения значений. В случае коллизий (когда несколько ключей имеют одинаковый хеш-код), HashMap использует цепочки (связанные списки или деревья) для хранения нескольких элементов в одной корзине. HashMap обеспечивает доступ к элементам за время O(1) в среднем случае.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥4
🤔 Что такое JSTL, JSP Standard tag library?

Это библиотека стандартных тегов для JSP (JavaServer Pages), которая предоставляет набор общих функций, которые разработчики часто используют в веб-приложениях.

🟠Core Tags (Основные теги)
Эти теги включают основные функции для управления потоком выполнения (например, условные операторы и циклы), а также для работы с URL, редиректами и параметрами. <c:if> условное выполнение блока кода.
<c:if test="${param.user != null}">
Привет, ${param.user}!
</c:if>


<c:forEach> итерация по коллекциям.
<c:forEach var="item" items="${itemList}">
${item}
</c:forEach>


🟠Formatting Tags (Теги форматирования)
Эти теги используются для форматирования и интернационализации данных, таких как даты, числа и сообщения. <fmt:formatNumber> форматирование чисел.
<fmt:formatNumber value="12345.67" type="currency" />


<fmt:message> вывод локализованного сообщения.
<fmt:message key="welcome.message" />


🟠SQL Tags (SQL теги)
Эти теги предоставляют простой способ выполнения SQL-запросов и работы с базами данных.
<sql:query> выполнение SQL-запроса.
<sql:query var="result" dataSource="${dataSource}">
SELECT * FROM users
</sql:query>


🟠XML Tags (XML теги)
Эти теги используются для работы с XML-документами, их парсинга и преобразования. <x:parse> парсинг XML-документа.
<x:parse var="xmlDoc" xml="${xmlString}" /> 


<x:out> вывод содержимого XML-узла.
<x:out select="$xmlDoc/root/element" />


🟠Function Tags (Функции)
Эти теги предоставляют набор полезных функций, таких как работа со строками. <fn:length> определение длины строки или коллекции.
${fn:length(myList)}


<fn:contains> проверка, содержит ли строка указанную подстроку.
${fn:contains(myString, 'substring')}


🚩Плюсы

Читаемость и простота кода
Использование тегов вместо Java-кода улучшает читаемость JSP-страниц и делает их более понятными для разработчиков.
Меньше кода
JSTL позволяет сократить количество Java-кода на странице, делая код более компактным и легко сопровождаемым.
Модульность и повторное использование
Теги JSTL позволяют выделить общие функции в отдельные компоненты, которые можно многократно использовать в разных частях приложения.
Интернационализация
Теги форматирования и работы с сообщениями упрощают процесс локализации веб-приложений.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
🤔 В чём различие между интерфейсом и абстрактным классом?

Интерфейс определяет набор методов, которые должны быть реализованы классами, но не может содержать реализацию (до Java 8, когда появились default методы). Абстрактный класс может содержать как абстрактные методы, так и методы с реализацией, а также может иметь поля. Класс может реализовать несколько интерфейсов, но наследовать только один абстрактный класс. Абстрактные классы используются, когда требуется частичная реализация, а интерфейсы — для создания общего контракта.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍313