Наследование является одним из основных понятий объектно-ориентированного программирования. Java поддерживает наследование и определяет отношение is-a между суперклассом и подклассом. Например, если подкласс Car (Автомобиль) унаследован от суперкласса Vehicle (ТранспортноеСредство), то это значит, что Car is-a (это тоже) Vehicle.
Наследование в Java — механизм, позволяющий создать новый класс из существующих классов.Наследование в Java является переходным, так что если Sedan (Седан) расширяет класс Car (Автомобиль), то это значит, что Седан также унаследован от класса Vehicle (ТранспортноеСредство). Таким образом Vehicle становится суперклассом как для класса Car, так и для класса Sedan.
Наследование широко используется в Java-приложениях. Хорошим примером будет класс Exception — его наследуют другие классы, чтобы создать более специфические классы ошибок.
В Java каждый класс неявно, но расширяет java.lang.Object класс, так Object-класс находится на верхнем уровне иерархии наследования в Java.
Простой пример реализации наследования в Java:
Animal.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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 используется в Java для реализации наследования.
Теперь давайте напишем простой тестовый класс, чтобы проверить некоторые методы класса Cat.
AnimalInheritanceTest.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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()); } } |
Результат выполнения программы:
1 2 3 4 |
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 (по умолчанию) доступен другим подклассам только если они находятся в том же пакете! Подробнее о модификаторах доступа в Java читайте здесь.
- Конструкторы суперкласса не наследуются подклассами.
- Если суперкласс не имеет конструктора по умолчанию, то подкласс должен иметь явный конструктор. В противном случае он будет бросать compile time exception (исключение времени компиляции).
- Java не поддерживает множественное наследование, поэтому подкласс может наследовать только один класс!
Следите за обновлениями на prologistic.com.ua
whoah this blog is excellent i like reading your posts. Stay up the great pasitingn! You know, many people are hunting around for this info, you can aid them greatly.
like
Нужна IDE ?
Я пока продолжаю в консоли дебиан. Результат успешно.