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. Резюме
В этом коротком руководстве мы узнали о конкретных классах и их спецификациях.
Кроме того, мы показали различия между интерфейсами и конкретными и абстрактными классами.