Перейти к основному содержимому

Конкретный класс в Java

· 3 мин. чтения

Задача: Медиана двух отсортированных массивов

Даны два отсортированных массива размерами n и m. Найдите медиану слияния этих двух массивов.
Временная сложность решения должна быть O(log(m + n)) ...

ANDROMEDA

1. Введение

В этом кратком руководстве мы обсудим термин «конкретный класс» в Java .

Сначала определимся с термином. Затем мы увидим, чем он отличается от интерфейсов и абстрактных классов.

2. Что такое конкретный класс?

Конкретный класс — это класс, экземпляр которого мы можем создать, используя ключевое слово new .

Другими словами, это полная реализация своего плана . Конкретный класс готов.

Представьте, например, класс Car :

public class Car {
public String honk() {
return "beep!";
}

public String drive() {
return "vroom";
}
}

Поскольку все его методы реализованы, мы называем его конкретным классом и можем создать его экземпляр:

Car car = new Car();

Некоторыми примерами конкретных классов из JDK являются HashMap , HashSet , ArrayList и LinkedList .

3. Абстракция Java против конкретных классов

Однако не все типы Java реализуют все свои методы. Эта гибкость, также называемая абстракцией , позволяет нам думать о предметной области, которую мы пытаемся моделировать, в более общих терминах.

В Java мы можем достичь абстракции, используя интерфейсы и абстрактные классы.

Давайте лучше посмотрим на конкретные классы, сравнив их с этими другими.

3.1. Интерфейсы

Интерфейс — это план для класса . Или, другими словами, это набор нереализованных сигнатур методов:

interface Driveable {
void honk();
void drive();
}

Обратите внимание, что здесь используется ключевое слово interface вместо class.

Поскольку в Driveable есть нереализованные методы, мы не можем создать его экземпляр с ключевым словом new .

Но конкретные классы, такие как Car , могут реализовать эти методы.

JDK предоставляет ряд интерфейсов, таких как Map , List и Set .

3.2. Абстрактные классы

Абстрактный класс — это класс, который имеет нереализованные методы, хотя на самом деле он может иметь и то, и другое:

public abstract class Vehicle {
public abstract String honk();

public String drive() {
return "zoom";
}
}

Обратите внимание, что мы помечаем абстрактные классы ключевым словом abstract .

Опять же, поскольку у Vehicle есть нереализованный метод honk , мы не сможем использовать новое ключевое слово.

Некоторыми примерами абстрактных классов из JDK являются AbstractMap и AbstractList .

3.3. Классы бетона

Напротив, в конкретных классах нет нереализованных методов. Независимо от того, наследуются реализации или нет, если у каждого метода есть реализация, класс является конкретным.

Конкретные классы могут быть такими же простыми, как наш предыдущий пример с автомобилем . Они также могут реализовывать интерфейсы и расширять абстрактные классы:

public class FancyCar extends Vehicle implements Driveable {
public String honk() {
return "beep";
}
}

Класс FancyCar предоставляет реализацию сигнала и наследует реализацию привода от автомобиля.

Таким образом, у него нет нереализованных методов . Следовательно, мы можем создать экземпляр класса FancyCar с новым ключевым словом.

FancyCar car = new FancyCar();

Или, проще говоря, все классы, которые не являются абстрактными, мы можем назвать конкретными классами.

4. Резюме

В этом коротком руководстве мы узнали о конкретных классах и их спецификациях.

Кроме того, мы показали различия между интерфейсами и конкретными и абстрактными классами.