Похоже, у вас есть какие-то домашние задания в отношении наследования, которое хорошо, но если мы просто сказать вам ответ, вы не изучать точку. Понимание того, как Java (и большинство современных языков) является объектно-ориентированным, является очень важно узнать, как правильно кодировать.
Я немного упрощаю это, но думаю об этом так: любое существительное, о котором вы можете думать, может быть его собственным классом. «Класс» по сути своей является просто конструкцией, которую мы должны помочь нам организовать наш код, это всего лишь совокупность данных и вычислений по этим данным. Если бы у нас не было классов, наш код был бы невероятно тяжело писать, поскольку он становится все больше и больше и практически невозможно разделить между несколькими программистами одновременно.
Inheritance - это способ для нас «наследовать» информацию для класса из более общего класса. Например, допустим, у нас есть класс Car
. Car
имеет несколько полей данных, и, возможно, наша программа изначально разработана таким образом, что все наши данные полностью соответствуют этой форме. Итак, возможно, наш основной метод имеет множество заявлений, таких как Car car9 = new Car("blue", "Ford", 2005)
, классный. Но подождите - теперь приходит что-то, что не подходит точно в набор данных! Предположим, что это Mustang, и ему нужны данные для переменной под названием engine
. Это не относится к классу Car
, поэтому у нас есть три варианта: 1. Добавить engine
в Car
. Очевидно, это не идеально; многие из наших записей будут в конечном итоге не использовать это вообще, и мы можем столкнуться с нулевыми проблемами в будущем, если мы не будем осторожны. 2. Скопируйте Car
, переименуйте его Mustang
и добавьте дополнительные данные. Это решение действительно работает, но посмотрите на весь этот дублированный код! Каждый раз, когда мы меняем что-либо в любом классе, нам придется помнить, чтобы вернуться и изменить другого! 3. Наследование. Это то решение, которое мы хотим. Поскольку Mustang «is-a» Car, мы можем определить новый класс, который наследует его опциями из своего родителя, или это «суперкласс». Для этого мы используем ключевое слово extends
: public class Mustang extends Car{
. Теперь Mustang
автоматически может использовать все, что Car
просто сказал super().ATTRIBUTE_OR_METHOD
. Кроме того, Mustang
может определять свои собственные новые методы, новые атрибуты, и мы сможем создавать классы Mustang так же, как мы бы создали Автомобиль: Mustang m = new Mustang("blue", "Ford", 2013, "awesome engine 3000")
. Мы получаем всю работу, которую мы вкладываем в класс Car, без необходимости дублировать код! Удивительно, правда?
В качестве примечания стороны Java имеет действительно классную концепцию под названием «полиморфизм», где, если вы расширяете класс, вы все равно можете использовать объявление своего суперкласса: Car m = new Mustang("blue", "Ford", 2013, "awesome engine 3000")
. Это может быть очень полезно, поскольку вы понимаете полномочия и недостатки, связанные с наследованием.
Короче говоря: создайте суперкласс, который содержит ваши «обобщенные» методы и данные, затем используйте наследование с помощью ключевого слова extends
, чтобы создать более конкретные ветви (называемые «подклассами») вашего суперкласса.