Перейти к содержанию

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

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

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

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

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

Посмотрим, например, на класс Car:

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

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

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

Car car = new Car();

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

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

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

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

Посмотрим на конкретные классы, сравнив их с другими.

Интерфейсы

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

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

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

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

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

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

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

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

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

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

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

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

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

Конкретные классы

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

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

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

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

FancyCar car = new FancyCar();

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

Заключение

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

Оригинал