🔥 🚀 Важно для всех, кто работает с Java! 🔥
На JavaRocks ты найдешь уникальные туториалы, практические задачи и редкие книги, которых не найти в свободном доступе. Присоединяйся к нашему Telegram-каналу JavaRocks — стань частью профессионального сообщества!
Что такое ключевое слово extends в Java?
Ключевое слово extends
в Java используется для реализации наследования: один класс (дочерний) наследует свойства и поведение другого (родительского). Когда класс наследуется с помощью extends
, он получает все свойства и методы родительского класса. Ключевое слово используется при объявлении класса: сначала имя дочернего класса, потом extends
, а потом — имя родительского. Это выглядит следующим образом.
class ParentClass{ ...}
class ChildClass extends ParentClass { ... }
Run CodeЧто такое наследование в Java?
Прежде чем использовать extends
, стоит разобраться, что вообще такое наследование в контексте Java.
Java – это язык объектно-ориентированного программирования (ООП). Объектно-ориентированное программирование — это подход к созданию программ, основанный на использовании классов и объектов. Между классами могут существовать определённые отношения, и одно из таких отношений — наследование.
Наследование описывает связь типа “является” (Is-A-Relationship) между объектами. Это механизм, с помощью которого один класс перенимает свойства и поведение другого. Класс, который наследуется, называется родительским или суперклассом, а класс, который наследует — дочерним или подклассом.
Extends
в Java — это ключевое слово, с помощью которого реализуется наследование между классами.
Пример применения ключевого слова extends
class Animal {
String name;
String sound;
int noOfLegs;
public Animal (){}
public Animal (String name, String sound, int legs){
this.name = name;
this.sound = sound;
this.noOfLegs = legs;
}
public void display() {
System.out.println("My name is " + name);
System.out.println("My sound is " + sound);
System.out.println("My no. of legs is " + noOfLegs);
}
}
class Dog extends Animal {
String color;
String breed;
public Dog(String name, String sound ,int legs, String color, String breed){
super(name,sound,legs);
this.color = color;
this.breed = breed;
}
public void display() {
super.display();
System.out.println("My color is " + color);
System.out.println("My breed is " + breed);
}
}
public class Main {
public static void main(String[] args) {
Dog dog1 = new Dog("Billy","Bark",4,"Brown","Labrador");
dog1.display();
System.out.println("------------------");
Dog dog2 = new Dog("Grace","Bark",4,"Black","Husky");
dog2.display();
System.out.println("------------------");
Dog dog3 = new Dog("Hugo","Bark",4,"Gray","Poodle");
dog3.display();
}
}
Run CodeЧто выведется в консоль:
My name is Billy
My sound is Bark
My no. of legs is 4
My color is Brown
My breed is Labrador
------------------
My name is Grace
My sound is Bark
My no. of legs is 4
My color is Black
My breed is Husky
------------------
My name is Hugo
My sound is Bark
My no. of legs is 4
My color is Gray
My breed is Poodle
Пояснение
В приведённом выше фрагменте кода показано, как работает наследование в Java с использованием ключевого слова extends
.
Есть два класса: родительский — Animal
, и дочерний — Dog
. Класс Dog
наследуется от Animal
, то есть получает доступ ко всем его свойствам и методам.
Благодаря наследованию, дочернему классу не нужно заново описывать то, что уже реализовано в родительском — это экономит время и делает код более чистым и повторно используемым.
Примеры переопределения методов в Java
Когда в подклассе заново реализуется метод, уже описанный в родительском классе — это называется переопределением. Это позволяет адаптировать поведение унаследованных методов.
Пример использования @Override
class Animal {
void sound() {
System.out.println("Animals make sounds");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Dogs bark");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Dog();
myAnimal.sound();
}
}
Run CodeСовет: всегда используйте аннотацию @Override
при переопределении методов. Она гарантирует, что сигнатура метода в подклассе точно совпадает с сигнатурой метода суперкласса, что помогает избежать трудноуловимых ошибок.
Значение ключевого слова super
Ключевое слово super
используется для вызова методов или доступа к полям суперкласса. Это особенно актуально, если в подклассе переопределён метод, но при этом всё ещё нужно вызвать его из суперкласса.
Пример использования super
при переопределении метода
class Animal {
void sound() {
System.out.println("Animals make sounds");
}
}
class Dog extends Animal {
@Override
void sound() {
super.sound();
System.out.println("Dogs bark");
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.sound();
}
}
Run CodeСовет: используйте super
с осторожностью — это позволит грамотно сочетать поведение суперкласса с логикой, специфичной для подкласса.
Цепочка конструкторов при наследовании
Цепочка конструкторов (constructor chaining) позволяет конструктору подкласса вызвать конструктор суперкласса с помощью ключевого слова super
. Это нужно для того, чтобы сначала был инициализирован родительский класс — только потом создаётся объект подкласса.
Пример цепочки вызовов конструкторов
class Animal {
Animal(String name) {
System.out.println("Animal constructor: " + name);
}
}
class Dog extends Animal {
Dog(String name) {
super(name);
System.out.println("Dog constructor: " + name);
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog("Buddy");
}
}
Run CodeСовет: при использовании конструктора подкласса всегда вызывайте super()
первым, чтобы корректно инициализировать родительский класс.
Заключение
В этой статье мы разобрали, как применять ключевое слово extends
в коде, и рассмотрели основные принципы объектно-ориентированного подхода в Java и наследования. Теперь вы можете применять наследование между классами и создавать новые примеры, чтобы лучше понять, как это работает. Главное — не останавливайтесь на достигнутом и продолжайте развивать свои навыки!
Перевод статьи «Java Extends Keyword with Examples».