Теперь создадим в методе main()
двух разных собак: обычную и большую и заставим их лаять.
Dog dog = new Dog("Тузик", 2);
dog.voice();
BigDog bigdog = new BigDog();
bigdog.voice();
Объект подкласса всегда будет одновременно являться объектом любого из своих суперклассов. Поэтому в том же примере мы могли бы обойтись и одной переменной:
Dog dog = new Dog("Тузик", 2);
dog.voice();
dog = new BigDog();
dog.voice();
о впечатляющих возможностях полиморфизма
Т.е. переменная dog
имеет тип Dog
, но в третьей строке она начинает указывать на объект класса BigDog
, то есть БОЛЬШУЮ собаку, которая при вызове метода voice()
будет лаять как БОЛЬШАЯ собака. Это одна из впечатляющих возможностей объектно-ориентированного программирования.