Super java что это
Наследование
Содержание
Наследование — это процесс перенимания классом свойств (методов и полей) другого класса. С использованием в Java наследования информация становится управляемой в иерархическом порядке.
Класс, который наследует свойства другого класса, называется подклассом (производным классом, наследующим классом), а класс, свойства которого наследуются, известен как суперкласс (базовый класс, родительский класс)
Ключевое слово extends
extends — это кодовое слово, используемое для наследования свойств класса. Взглянем на синтаксис этого ключевого слова.
Синтаксис
Пример кода
Дальше приведён пример процесса наследования на Java. На этом примере Вы можете рассмотреть два класса с именами Calculator и My_Calculator.
Используя ключевое слово extends в Java, My_Calculator перенимает методы addition() и subtraction() класса Calculator.
Скопируйте и вставьте эту программу в файле под именем My_Calculator.java
Скомпилируйте и выполните вышеприведённый код, как показано ниже.
После запуска программы получим следующий результат:
В данной программе, при создании объекта классу My_Calculator, копия содержимого суперкласса создаётся в нём же. Поэтому, используя объект подкласса, Вы можете получить доступ к членам суперкласса.
Ссылочная переменная суперкласса может содержать объект подкласса, но, используя эту переменную, Вы можете иметь доступ только к членам суперкласса, поэтому, чтобы иметь доступ к членам обоих классов, рекомендуется всегда создавать ссылочную переменную к подклассу.
Обращаясь к программе выше, Вы можете создать экземпляр класса, как в примере ниже. Но, используя ссылочную переменную суперкласса, Вы не можете вызвать метод multiplication(), который принадлежит подклассу My_Calculator.
Примечание: подкласс наследует все члены (поля, методы, вложенные классы) из суперкласса. в Java конструкторы не являются членами, поэтому они не наследуются подклассом, но конструктор суперкласса может быть вызван из подкласса.
Ключевое слово super
Ключевое слово super схоже с ключевым словом this. Ниже приведены случаи, где используется super в Java.
Дифференциация членов
Если класс перенимает свойства другого класса, и члены суперкласса имеют те же имена, что и в подклассе, для их разделения мы используем ключевое слово super, как показано ниже.
Пример кода
Этот раздел содержит программу, которая демонстрирует использование ключевого слова super в Java.
В предложенной программе у вас есть два класса с именами Sub_class и Super_class, оба имеющие метод display() с разными реализациями и переменную с именем num с разными значениями. Вы можете увидеть, что мы использовали ключевое слово super для дифференциации членов суперкласса из подкласса.
Скопируйте и вставьте эту программу в файле под именем Sub_class.java.
Скомпилируйте и выполните вышеприведённый код, как показано ниже.
После запуска программы будет получен следующий результат:
Вызов конструктора суперкласса
Если класс перенимает свойства другого класса, подкласс автоматически получается стандартный конструктор суперкласса. Но если Вы хотите вызвать параметризованный конструктор суперкласса, Вам нужно использовать ключевое слово super, как показано ниже.
Пример кода
В предложенной программе демонстрируется использование в Java ключевого слова super для вызова параметризованного конструктора. В этой программе содержится суперкласс и подкласс, где суперкласс содержит параметризованный конструктор, который принимает строковое значение, а мы используем ключевое слово super для вызова параметризованного конструктора суперкласса.
Скопируйте и вставьте эту программу в файле под именем Subclass.java
Скомпилируйте и выполните вышеприведённый код, как показано ниже.
После запуска программы будет выдан результат:
Отношение IS-A
IS-A — это способ сказать «Этот объект является типом этого объекта». Давайте посмотрим, как ключевое слово extends используется для достижения наследования.
Теперь, основываясь на примере выше, в объектно-ориентированных терминах, следующие утверждения верны
Теперь, используя отношение IS-A, мы можем сказать так:
С использованием ключевого слова extend, подклассы могут наследовать все свойства суперкласса кроме его приватных свойств (private).
Мы можем убедиться, что Mammal на самом деле Animal с использованием оператора экземпляра.
Мы получим следующий результат:
Так как у нас есть хорошее понимание принципа работы ключевого слова extends, давайте рассмотрим, как используется ключевое слово implements для получения отношения IS-A.
В общем, ключевое слово implements в Java используется с классами для перенятия свойств интерфейса. Интерфейсы никогда не могут быть переняты классом с помощью extends.
Пример
Ключевое Слово instanceof
Давайте использует оператор instanceof в Java с целью проверки, являются ли Mammal и Dog на самом деле Animal.
Пример
Мы получим следующий результат:
Отношение HAS-A
Эти отношения в основном основаны на обращении. Они определяют, является ли определенный класс HAS-A определенным случаем. Эта взаимосвязь помогает уменьшить дублирование кода, а также баги. Взглянем на пример.
Мы видим, что у класса Van HAS-A (есть) Speed. Имея отдельный класс Speed, нам не нужно вставлять код, принадлежащий Speed в класс Van, что позволяет нам использовать класс Speed в нескольких приложениях.
В особенности объектно-ориентированного программирования, пользователям не нужно волноваться о том, какой объект выполняет текущую работу. Для достижения этого, класс Van скрывает детали реализации от пользователей класса Van. Таким образом, пользователи, должны попросить класс Van выполнить определенное действие, и класс Van либо выполнит работу сам по себе, либо попросит другой класс выполнить действие.
Виды наследования
Есть различные способы наследования, как показано ниже.
Вид | Схема | Пример |
Одиночное наследование | ||
Многоуровневое наследование | ||
Иерархическое наследование | ||
Множественное наследование |
Очень важно запомнить, что Java не поддерживает множественное наследование. Это значит, что класс не может продлить более одного класса. Значит, следующее утверждение НЕВЕРНО:
Тем не менее, класс может реализовать один или несколько интерфейсов, что и помогло Java избавиться от невозможности множественного наследования.
Супер ключевое слово в Java
Ключевое слово super в java — это ссылочная переменная, которая используется для ссылки на объекты родительского класса. Ключевое слово «супер» вошло в картину с понятием наследования. Он в основном используется в следующих контекстах:
1. Использование super с переменными. Этот сценарий возникает, когда производный класс и базовый класс имеют одинаковые члены данных. В этом случае есть вероятность двусмысленности для JVM. Мы можем понять это более четко, используя этот фрагмент кода:
/ * Автомобиль базового класса * /
class Car extends Vehicle
/ * печать maxSpeed базового класса (транспортное средство) * /
/ * Программа для проверки драйверов * /
public static void main(String[] args)
Car small = new Car();
В приведенном выше примере базовый класс и подкласс имеют член maxSpeed. Мы можем получить доступ к maxSpeed базового класса в sublcass, используя ключевое слово super.
2. Использование super с методами: используется, когда мы хотим вызвать метод родительского класса. Поэтому, когда родительский и дочерний класс имеют одинаковые именованные методы, для устранения неоднозначности мы используем ключевое слово super. Этот фрагмент кода помогает понять упомянутое использование ключевого слова super.
/ * Базовый класс Person * /
System.out.println( «This is person class» );
class Student extends Person
System.out.println( «This is student class» );
// Обратите внимание, что display () только в классе Student
// вызовет или вызовет текущий метод класса message ()
// вызовет или вызовет метод message () родительского класса
/ * Программа для проверки драйверов * /
public static void main(String args[])
Student s = new Student();
// вызываем display () объекта Student
В приведенном выше примере мы видели, что если мы вызываем только метод message (), то вызывается текущий класс message (), но с использованием ключевого слова super можно также вызывать message () из суперкласса.
3 Использование super с конструкторами: ключевое слово super также можно использовать для доступа к конструктору родительского класса. Еще одна важная вещь заключается в том, что «супер» может вызывать как параметрические, так и непараметрические конструкторы в зависимости от ситуации. Ниже приведен фрагмент кода для объяснения вышеуказанной концепции:
System.out.println( «Person class Constructor» );
/ * Подкласс Студент, расширяющий класс Персона * /
class Student extends Person
// вызывать или вызывать конструктор родительского класса
System.out.println( «Student class Constructor» );
/ * Программа для проверки драйверов * /
public static void main(String[] args)
Student s = new Student();
В приведенном выше примере мы вызывали конструктор суперкласса, используя ключевое слово «super» через конструктор подкласса.
Другие важные моменты:
Java супер
В этом руководстве мы узнаем о ключевом слове super в Java с помощью примеров.
super Ключевое слово в Java используется в подклассах для доступа члены суперкласса (атрибуты, конструкторы и методы).
Прежде чем мы узнаем о super ключевом слове, убедитесь, что вы знаете о наследовании Java.
Использование ключевого слова super
Давайте разберемся в каждом из этих вариантов использования.
1. Доступ к переопределенным методам суперкласса
Если методы с одинаковыми именами определены как в суперклассе, так и в подклассе, метод в подклассе переопределяет метод в суперклассе. Это называется переопределением метода.
Пример 1: переопределение метода
Вывод
В этом примере, создав объект dog1 из класса Dog, мы можем вызвать его метод printMessage (), который затем выполняет display() инструкцию.
Поскольку display() он определен в обоих классах, метод подкласса Dog переопределяет метод суперкласса Animal. Следовательно, display() вызывается подкласс.
Что делать, если необходимо вызвать переопределенный метод суперкласса?
Мы используем, super.display() если display() необходимо вызвать переопределенный метод суперкласса Animal.
Пример 2: super для вызова метода суперкласса
Вывод
Вот как работает вышеуказанная программа.
2. Атрибуты доступа суперкласса
Суперкласс и подкласс могут иметь атрибуты с одинаковыми именами. Мы используем super ключевое слово для доступа к атрибуту суперкласса.
Пример 3: доступ к атрибуту суперкласса
Выход :
В этом примере мы определили один и тот же тип поля экземпляра как в суперклассе Animal, так и в подклассе Dog.
Затем мы создали объект dog1 класса Dog. Затем printType() вызывается метод с использованием этого объекта.
Внутри printType() функции
3. Использование super () для доступа к конструктору суперкласса
Как мы знаем, когда создается объект класса, автоматически вызывается его конструктор по умолчанию.
super() может использоваться только внутри конструктора подкласса и должен быть первым оператором.
Пример 4: Использование super ()
Вывод
Здесь, когда создается объект dog1 класса Dog, он автоматически вызывает конструктор по умолчанию или конструктор без аргументов этого класса.
Внутри конструктора подкласса super() оператор вызывает конструктор суперкласса и выполняет операторы внутри него. Отсюда получаем вывод «Я животное».
Затем поток программы возвращается к конструктору подкласса и выполняет оставшиеся операторы. Таким образом, я собака будет напечатана.
Однако использование super() не обязательно. Даже если super() он не используется в конструкторе подкласса, компилятор неявно вызывает конструктор суперкласса по умолчанию.
Итак, зачем использовать избыточный код, если компилятор автоматически вызывает super ()?
Это требуется, если параметризованный конструктор (конструктор, который принимает аргументы) суперкласса должен быть вызван из конструктора подкласса.
Параметризация super() всегда должна быть первым оператором в теле конструктора подкласса, в противном случае мы получим ошибку компиляции.
Пример 5: Вызов параметризованного конструктора с помощью super ()
Вывод
Компилятор может автоматически вызывать конструктор без аргументов. Однако он не может вызывать параметризованные конструкторы.
Если необходимо вызвать параметризованный конструктор, нам нужно явно определить его в конструкторе подкласса.
MnogoBlog
как создать сайт на wordpress, настроить и оптимизировать wordpress
Java Урок 37: НАСЛЕДОВАНИЕ, ключевое слово super
В предшествующих примерах классы, производные от класса Box, были реализованы не столь эффективно и надежно, как могли бы. Например, конструктор BoxWeight() явно инициализирует поля width, height и depth класса Box. Это не только ведет к дублированию кода суперкласса, что весьма неэффективно, но и предполагает наличие у подкласса доступа к этим членам.
Скачать исходники для статьи можно ниже
Однако в ряде случаев придется создавать суперкласс, подробности реализации которого доступны только для него самого (т.е. с закрытыми членами данных). В этом случае подкласс никак не может самостоятельно непосредственно обращаться к этим переменным или инициализировать их.
Поскольку инкапсуляция — один из главных атрибутов ООП, не удивительно, что язык Java предлагает решение этой проблемы.
Во всех случаях, когда подклассу нужно сослаться на его непосредственный суперкласс, это можно сделать при помощи ключевого слова super.
Ключевое слово super имеет две общие формы.
Первую используют для вызова конструктора суперкласса, а вторую — для обращения к члену суперкласса, скрытому членом подкласса. Рассмотрим обе формы.
Использование ключевого слова super для вызова конструкторов суперкласса.
Подкласс может вызывать конструктор, определенный его суперклассом, с помощью следующей формы ключевого слова super.
Здесь список_аргументов определяет любые аргументы, требуемые конструктору в суперклассе. Вызов метода super() всегда должен быть первым оператором, выполняемым внутри конструктора подкласса.
В качестве иллюстрации использования метода super() рассмотрим следующий пример:
В этом примере конструктор BoxWeight() вызывает метод super() с аргументами w, h и d. Это приводит к вызову конструктора Box(), который инициализирует переменные width, height и depth, используя переданные ему значения соответствующих параметров.
Теперь класс BoxWeight не инициализирует эти значения самостоятельно. Ему нужно инициализировать только свое уникальное значение — weight. В результате при необходимости эти значения могут оставаться закрытыми значениями класса Box.
В приведенном примере метод super() был вызван с тремя аргументами.
Поскольку конструкторы могут быть перегруженными, метод super() можно вызывать, используя любую форму, определенную суперклассом.
Программа выполнит тот конструктор, который соответствует указанным аргументам.
В качестве примера приведем полную реализацию класса BoxWeight, которая предоставляет конструкторы для различных способов создания параллелепипедов.
В каждом случае метод super() вызывается с соответствующими аргументами.
Обратите внимание на то, что внутри класса Box его члены width, height и depth объявлены как закрытые.
Эта программа создает следующий вывод:
Объем myboxl равен 3000.0
Вес myboxl равен 34.3
Объем mybox2 равен 24.0
Вес mybox2 равен 0.07 6
Объем myclone равен 3000.0
Вес myclone равен 34.3
Объем mycube равен 27.0
Вес mycube равен 2.0
Обратите особое внимание на следующий конструктор в классе BoxWeight.
Обратите внимание на то, что метод super() выполняет передачу объекту
класса BoxWeight, а не класса Box. Тем не менее это все равно ведет к вызову конструктора Box(Box. ob).
Как уже было отмечено, переменную суперкласса можно использовать для ссылки на любой объект, унаследованный от этого класса.
Таким образом, объект класса BoxWeight можно передать конструктору Box().
Конечно, классу Box будут известны только его собственные члены.
Рассмотрим основные концепции применения метода super().
Когда подкласс вызывает метод super(), он вызывает конструктор своего непосредственного суперкласса. Таким образом, метод super() всегда ссылается на суперкласс, расположенный в иерархии непосредственно над вызывающим классом. Это справедливо даже в случае многоуровневой иерархии. Кроме того, метод super() всегда должен быть первым оператором, выполняемым внутри конструктора подкласса.
Второе применение ключевого слова super.
Вторая форма ключевого слова super действует подобно ключевому слову
this, за исключением того, что всегда ссылается на суперкласс подкласса, в котором она использована. Общая форма этого применения ключевого слова super имеет следующий вид:
Здесь член может быть методом либо переменной экземпляра.
Вторая форма применения ключевого слова super наиболее подходит в тех
ситуациях, когда имена членов подкласса скрывают члены суперкласса с такими же именами. Рассмотрим следующую простую иерархию классов.
Эта программа отображает следующее:
i в суперклассе: 1
i в подклассе: 2
Хотя переменная экземпляра i в классе В скрывает переменную i в классе А, ключевое слово super позволяет получить доступ к переменной i, определенной в суперклассе. Как вы увидите, ключевое слово super можно использовать также для вызова методов, которые скрываются подклассом.
Наследование в Java: классов, методов и интерфейсов
Идея наследования в Java заключается в том, что вы можете создавать новые классы, основанные на существующих классах. Когда вы наследуете от существующего класса, вы можете повторно использовать методы и поля родительского класса. Более того, вы также можете добавлять новые методы и поля в ваш текущий класс.
Наследование представляет собой отношение IS-A, которое также известно как отношение родитель-ребенок.
Наследование в программировании на Java может быть определено как процесс, в котором один класс приобретает свойства (методы и поля) другого. С использованием наследования информация становится управляемой в иерархическом порядке.
Класс, который наследует свойства другого, известен как подкласс(производный класс, дочерний класс), а класс, свойства которого наследуются, называется суперклассом (базовый класс, родительский класс).
extends – это ключевое слово, используемое для обозначения наследования свойств класса.
Это важная часть ООП (объектно-ориентированного программирования).
Синтаксис наследования на Java
Пример наследования, здесь есть два класса, а именно: Calculation и My_Calculation.
Используя ключевое слово extends, My_Calculation наследует методы addition() и Subtraction() класса Calculation.
Скопируйте и вставьте следующую программу в файл с именем My_Calculation.java
Скомпилируйте и выполните приведенный выше код, как показано ниже.
После выполнения программы она даст следующий результат –
The sum of the given numbers:30
The difference between the given numbers:10
The product of the given numbers:200
В данной программе, когда создается объект класса My_Calculation, в нем создается копия содержимого суперкласса. Вот почему, используя объект подкласса, вы можете получить доступ к членам суперкласса.
Переменная суперкласса может содержать объект подкласса, но с помощью этой переменной вы можете получить доступ только к членам суперкласса, поэтому для доступа к членам обоих классов рекомендуется всегда создавать ссылочную переменную для подкласса.
Теперь создадим экземпляр класса, как указано ниже. Но используя ссылочную переменную суперкласса (в данном случае cal), вы не можете вызвать метод multiplication(), который принадлежит подклассу My_Calculation.
Подкласс наследует все члены(поля, методы и вложенные классы) от своего суперкласса. Конструкторы не являются членами, поэтому они не наследуются подклассами, но конструктор суперкласса может быть вызван из подкласса.
Ключевое слово super
Ниже приведены сценарии, в которых используется ключевое слово super.
Оно используется для различения членов суперкласса от членов подкласса, если они имеют одинаковые имена. И используется для вызова конструктора суперкласса из подкласса.
Разграничение членов. Если класс наследует свойства другого класса. И если члены суперкласса имеют имена, совпадающие с подклассом, для дифференциации этих переменных мы используем ключевое слово super, как показано ниже.
программа, которая демонстрирует использование ключевого слова super. У вас есть два класса, а именно Sub_class и Super_class, оба имеют метод display() с разными реализациями и переменную с именем num с разными значениями.
Мы вызываем метод display() обоих классов и печатаем значение переменной num обоих классов. Здесь вы можете заметить, что мы использовали ключевое слово super, чтобы отличать членов суперкласса от подкласса.
Скопируйте и вставьте программу в файл с именем Sub_class.java.
Скомпилируйте и выполните приведенный выше код, используя следующий синтаксис.
Результат
This is the display method of subclass
This is the display method of superclass
value of the variable named num in sub class:10
value of the variable named num in super class:20
Вызов конструктора суперкласса
Если класс наследует свойства другого класса, подкласс автоматически получает конструктор по умолчанию суперкласса. Но если вы хотите вызвать параметризованный конструктор суперкласса, вам нужно использовать ключевое слово super.
super(values);
Покажем как использовать ключевое слово super для вызова параметризованного конструктора суперкласса. Эта программа содержит суперкласс и подкласс, где суперкласс содержит параметризованный конструктор, который принимает целочисленное значение, и мы использовали ключевое слово super для вызова параметризованного конструктора суперкласса.
Скопируйте и вставьте следующую программу в файл с именем Subclass.java
Скомпилируйте и выполните приведенный выше код, используя следующий синтаксис.
Результат
The value of the variable named age in super class is: 24
IS-A отношения
IS-A – это способ показать: этот объект является типом этого объекта. Давайте посмотрим, как ключевое слово extends используется для наследования.
Теперь, на основе приведенного выше примера, в объектно-ориентированных терминах верно следующее:
Теперь, если мы рассмотрим отношения IS-A, мы можем сказать –
С использованием ключевого слова extends подклассы смогут наследовать все свойства суперкласса, за исключением частных свойств суперкласса.
Мы можем гарантировать, что млекопитающее на самом деле является животным с использованием оператора экземпляра.
И результат
true
true
true
Покажем как ключевое слово Implements используется для получения отношения IS-A.
Обычно ключевое слово Implements используется с классами для наследования свойств интерфейса. Интерфейсы никогда не могут быть расширены классом.
Что такое ключевое слово instanceof в Java?
Оператор java instanceof используется для проверки того, является ли объект экземпляром указанного типа (класс, подкласс или интерфейс).
Instanceof также известен как оператор сравнения типов, потому что он сравнивает экземпляр с типом. Возвращает либо true, либо false. Если мы применяем оператор instanceof к любой переменной, которая имеет нулевое значение, она возвращает false.
Если мы применяем оператор instanceof к переменной с нулевым значением, он возвращает false.
Давайте воспользуемся оператором instanceof, чтобы проверить, действительно ли млекопитающее является животным, а собака на самом деле животным.
Результат будет получен:
true
true
true
HAS-A отношения
HAS-A определяет, есть ли у определенного класса определенная вещь. Это соотношение помогает уменьшить дублирование кода и ошибок.
Это показывает, что класс Van имеет Speed(скорость). Имея отдельный класс скорости, нам не нужно помещать весь код, принадлежащий скорости, в класс Van, что позволяет повторно использовать класс скорости в нескольких приложениях.
В объектно-ориентированной функции на Java пользователям не нужно беспокоиться о том, какой объект выполняет работу. Для этого класс Van скрывает детали реализации от пользователей класса Van.
Пользователи просят класс Van выполнить определенное действие, и класс Van либо сделает работу сам по себе, либо попросит другой класс выполнить действие.
Типы наследования
Существуют различные типы наследования на Java, как показано ниже.
Java не поддерживает множественное наследование. Это означает, что класс не может расширять более одного класса. Поэтому следующий код не сработает:
Однако класс может реализовать один или несколько интерфейсов, что помогло избавиться от невозможности множественного наследования.
Чтобы никто не мог наследовать класс просто используйте модификатор доступа final перед названием класса. (final class Nameclass <> )
Средняя оценка / 5. Количество голосов:
Или поделись статьей
Видим, что вы не нашли ответ на свой вопрос.