Супер ключове слово Java (з прикладами)

У цьому посібнику ми дізнаємося про ключове слово super у Java за допомогою прикладів.

superКлючове слово в Java використовується в підкласах для доступу члени суперкласу (атрибути, конструктори і методи).

Перш ніж ми дізнаємося про superключове слово, обов’язково знайте про успадкування Java.

Використання супер ключового слова

  1. Викликати методи суперкласу, який замінено в підкласі.
  2. Для доступу до атрибутів (полів) суперкласу, якщо і суперклас, і підклас мають атрибути з однаковим іменем.
  3. Для явного виклику суперкласу no-arg (за замовчуванням) або параметризованого конструктора з конструктора підкласу.

Давайте розберемося з кожним із цих застосувань.

1. Доступ до перевизначених методів суперкласу

Якщо методи з однаковим іменем визначені як у суперкласі, так і в підкласі, метод у підкласі замінює метод у суперкласі. Це називається перевизначенням методу.

Приклад 1: Заміна методу

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

Вихідні дані

 Я собака 

У цьому прикладі, створивши об'єкт dog1 класу Dog, ми можемо викликати його метод printMessage (), який потім виконує display()оператор.

Оскільки display()визначено в обох класах, метод підкласу Dog замінює метод суперкласу Animal. Отже, display()називається підклас.

Що робити, якщо потрібно викликати перевизначений метод суперкласу?

Ми використовуємо, super.display()якщо display()потрібно викликати замінений метод суперкласу Animal.

Приклад 2: супер для виклику методу суперкласу

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( // this calls overriding method display(); // this calls overridden method super.display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

Вихідні дані

 Я собака Я тварина 

Ось як працює вищевказана програма.

2. Доступ до атрибутів суперкласу

Суперклас і підклас можуть мати атрибути з однаковим іменем. Ми використовуємо superключове слово для доступу до атрибуту суперкласу.

Приклад 3: Доступ до атрибута суперкласу

 class Animal ( protected String; ) class Dog extends Animal ( public String; public void printType() ( System.out.println("I am a " + type); System.out.println("I am an " + super.type); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printType(); ) ) 

Вихід :

 Я ссавець Я тварина 

У цьому прикладі ми визначили однаковий тип поля екземпляра як у суперкласі Animal, так і в підкласі Dog.

Потім ми створили об’єкт dog1 класу Dog. Потім за printType()допомогою цього об'єкта викликається метод.

Усередині printType()функції,

  • тип відноситься до атрибута підкласу Dog.
  • super.type відноситься до атрибуту суперкласу Animal.

Отже, System.out.println("I am a " + type);відбитки Я ссавець. І, System.out.println("I am an " + super.type);відбитки Я - тварина.

3. Використання super () для доступу до конструктора суперкласу

Як ми знаємо, коли створюється об'єкт класу, його конструктор за замовчуванням викликається автоматично.

Для явного виклику конструктора суперкласу з конструктора підкласу ми використовуємо super(). Це спеціальна форма superключового слова.

super() може використовуватися лише всередині конструктора підкласу і повинен бути першим оператором.

Приклад 4: Використання супер ()

 class Animal ( // default or no-arg constructor of class Animal Animal() ( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // default or no-arg constructor of class Dog Dog() ( // calling default constructor of the superclass super(); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

Вихідні дані

 Я тварина Я собака 

Тут, коли створюється об’єкт dog1 класу Dog, він автоматично викликає конструктор за замовчуванням або no-arg цього класу.

Усередині конструктора підкласу super()оператор викликає конструктор суперкласу і виконує оператори всередині нього. Отже, ми отримуємо вихід Я тварина.

Потік програми потім повертається до конструктора підкласу і виконує решту операторів. Таким чином, я собака буде надрукована.

Однак використання super()не є обов’язковим. Навіть якщо super()він не використовується в конструкторі підкласу, компілятор неявно викликає конструктор за замовчуванням суперкласу.

Отже, навіщо використовувати надлишковий код, якщо компілятор автоматично викликає super ()?

Це потрібно, якщо параметризований конструктор (конструктор, який приймає аргументи) суперкласу повинен бути викликаний із конструктора підкласу.

Параметризований super()завжди повинен бути першим оператором у тілі конструктора підкласу, інакше ми отримуємо помилку компіляції.

Приклад 5: Виклик параметризованого конструктора з використанням super ()

 class Animal ( // default or no-arg constructor Animal() ( System.out.println("I am an animal"); ) // parameterized constructor Animal(String type) ( System.out.println("Type: "+type); ) ) class Dog extends Animal ( // default constructor Dog() ( // calling parameterized constructor of the superclass super("Animal"); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

Вихідні дані

 Тип: Тварина Я собака 

Компілятор може автоматично викликати конструктор no-arg. Однак він не може викликати параметризовані конструктори.

Якщо потрібно викликати параметризований конструктор, нам потрібно явно визначити його в конструкторі підкласу.

Зверніть увагу, що у наведеному вище прикладі ми явно називали параметризований конструктор super("Animal"). У цьому випадку компілятор не викликає конструктор за замовчуванням суперкласу.

Цікаві статті...