Рубрики
Без рубрики

Наследование в примере Java

Наследование в java, пример наследования Java, наследование в java с примерами программ, программа наследования java, ключевое слово extends, подкласс, суперкласс

Автор оригинала: Pankaj Kumar.

Наследование в java является одной из основных концепций Объектно-ориентированного программирования . Наследование Java используется, когда у нас есть is-a связь между объектами. Наследование в Java реализовано с использованием ключевого слова extends .

Наследование в Java

Наследование в Java-это метод создания иерархии между классами путем наследования от других классов.

Наследование Java является переходным – поэтому , если Седан расширяет автомобиль и Автомобиль расширяет автомобиль , то седан также наследуется от класса транспортного средства. Транспортное средство становится суперклассом как легкового автомобиля, так и седана.

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

Пример наследования Java

Каждый класс в java неявно расширяет java.lang.Объект класс. Таким образом, класс объектов находится на верхнем уровне иерархии наследования в java.

Давайте посмотрим, как реализовать наследование в java на простом примере.

Суперкласс: Животное

package com.journaldev.inheritance;

public class Animal {

	private boolean vegetarian;

	private String eats;

	private int noOfLegs;

	public Animal(){}

	public Animal(boolean veg, String food, int legs){
		this.vegetarian = veg;
		this.eats = food;
		this.noOfLegs = legs;
	}

	public boolean isVegetarian() {
		return vegetarian;
	}

	public void setVegetarian(boolean vegetarian) {
		this.vegetarian = vegetarian;
	}

	public String getEats() {
		return eats;
	}

	public void setEats(String eats) {
		this.eats = eats;
	}

	public int getNoOfLegs() {
		return noOfLegs;
	}

	public void setNoOfLegs(int noOfLegs) {
		this.noOfLegs = noOfLegs;
	}

}

Животное здесь является базовым классом. Давайте создадим класс Cat, который наследуется от класса Animal.

Подкласс: Может

package com.journaldev.inheritance;

public class Cat extends Animal{

	private String color;

	public Cat(boolean veg, String food, int legs) {
		super(veg, food, legs);
		this.color="White";
	}

	public Cat(boolean veg, String food, int legs, String color){
		super(veg, food, legs);
		this.color=color;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

}

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

Программа тестирования наследования Java

Давайте напишем простой тестовый класс для создания объекта Cat и используем некоторые из его методов.

package com.journaldev.inheritance;

public class AnimalInheritanceTest {

	public static void main(String[] args) {
		Cat cat = new Cat(false, "milk", 4, "black");

		System.out.println("Cat is Vegetarian?" + cat.isVegetarian());
		System.out.println("Cat eats " + cat.getEats());
		System.out.println("Cat has " + cat.getNoOfLegs() + " legs.");
		System.out.println("Cat color is " + cat.getColor());
	}

}

Вывод программы наследования Java

Вывод вышеуказанной программы показан на рисунке ниже.

Класс Cat не имеет метода getEats () , но все равно он работает, потому что унаследован от класса Animal.

Важные моменты наследования Java

  1. Повторное использование кода является наиболее важным преимуществом наследования, поскольку подклассы наследуют переменные и методы суперкласса.
  2. Частные члены суперкласса не доступны напрямую подклассу. Как и в этом примере, переменная Animal no Of Legs недоступна классу Cat, но она может быть косвенно доступна с помощью методов getter и setter.
  3. Члены суперкласса с доступом по умолчанию доступны подклассу ТОЛЬКО в том случае, если они находятся в одном пакете.
  4. Суперкласс конструкторы не наследуются подклассом.
  5. Если у суперкласса нет конструктора по умолчанию, то для подкласса также должен быть определен явный конструктор. В противном случае это вызовет исключение времени компиляции. В конструкторе подкласса вызов конструктора суперкласса в этом случае является обязательным и должен быть первым оператором в конструкторе подкласса.
  6. Java не поддерживает множественное наследование , подкласс может расширять только один класс. Класс Animal неявно расширяет класс объектов, а Cat расширяет класс животных, но из-за транзитивной природы наследования java класс Cat также расширяет класс объектов.
  7. Мы можем создать экземпляр подкласса, а затем назначить его переменной суперкласса, это называется восходящая передача . Ниже приведен простой пример трансляции:

  8. Когда экземпляр Суперкласса присваивается переменной подкласса, он называется понижающая передача . Нам нужно явно отнести это к подклассу. Например;

    Обратите внимание, что компилятор не будет жаловаться, даже если мы делаем это неправильно из-за явного приведения. Ниже приведены некоторые из случаев, когда он будет вызывать ClassCastException во время выполнения.

  9. Мы можем переопределить метод Суперкласса в Подклассе. Однако мы всегда должны аннотировать переопределенный метод с помощью @Переопределить аннотацию . Компилятор будет знать, что мы переопределяем метод, и если что-то изменится в методе суперкласса, мы получим ошибку во время компиляции, а не получим нежелательные результаты во время выполнения.
  10. Мы можем вызвать методы суперкласса и получить доступ к переменным суперкласса, используя ключевое слово super . Это удобно, когда у нас есть переменная/метод с одинаковым именем в подклассе, но мы хотим получить доступ к переменной/методу суперкласса. Это также используется, когда конструкторы определены в суперклассе и подклассе, и мы должны явно вызвать конструктор суперкласса.
  11. Мы можем использовать инструкцию instanceof для проверки наследования между объектами, давайте рассмотрим это на примере ниже.

  12. Мы не можем расширять конечные классы на java.
  13. Если вы не собираетесь использовать суперкласс в коде, то есть ваш суперкласс-это просто база для хранения повторно используемого кода, тогда вы можете сохранить их как Абстрактный класс , чтобы избежать ненужного создания экземпляров клиентскими классами. Это также ограничит создание экземпляра базового класса.

Видео наследования Java Я недавно опубликовал два видео на YouTube, подробно объясняющих наследование с помощью примеров программ, вы должны посмотреть их ниже.Вы можете ознакомиться с другими примерами наследования в нашем репозитории GitHub.Ссылка: Документация Oracle