Наследование на языке Java

Наследование – одно из основных понятий, которые использует объективно-ориентированное программирование. Язык Java поддерживает наследование и определяет отношения is-a между суперклассом и подклассом. К примеру, если подкласс Car (авто) унаследован от суперкласса Vehicle (ТС – транспортное средство), то это означает, что Car is-a (это тоже) Vehicle.

Наследование в Java – механизм, который позволяет создавать новый класс из существующих. Наследование является переходным, поэтому если Sedan расширяет класс Car, то значит Sedan тоже унаследован от класса Vehicle (ТС). Так Vehicle является суперклассом для обоих классов Car и Sedan.

Наследование активно используется в различных приложениях на Java. Ярким примером будет класс Exceptions – его наследуют другие классы, дабы создать классы ошибок более специфические. Каждый класс в Java неявно, но расширяет java.lang.Object класс. Таким образом Object-класс находится на верхнем уровне иерархии наследования в Java.

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

Animal.java
package ua.com.prologistic.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;
}
}

В примере класс Animal является базовым. Теперь создадим класс Cat. Он будет унаследован от класса Animal.

Cat.java
package ua.com.prologistic.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. Теперь приведем простой тестовый класс, дабы проверить некоторые методы класса Cat.

AnimalInheritanceTest.java
package ua.com.prologistic.inheritance;

public class AnimalInheritanceTest {

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

System.out.println(«Cat is vegetaring?» + 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());
}

}

Результат выполнения программы:

Cat is vegetaring?false
Cat eats milk
Cat has 4 legs.
Cat color is black

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

Ключевые моменты наследования в языке Java

  • Private-члены суперкласса являются недоступными для подклассов. Как в приведенном выше примере, переменная классаAnimal noOfLegs недоступна для Cat. Но данная проблема успешно решается путем создания методов getter и setter.
  • Подкласс, имеющий уровень доступа default, доступен другим подклассам если они находятся в этом же пакете.
  • Конструкторы суперкласса никогда не наследуются подклассами.
  • Если по умолчанию суперкласс не имеет конструктора, то подкласс должен иметь явный конструктор. Иначе он будет бросать исключение времени компиляции (compile time exception).
  • Java не поддерживает множественное наследование, а значит, подкласс может наследовать исключительно один класс.

Остались вопросы или столкнулись с какими-то проблемами? Задайте их в комментариях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *