Теперь создадим в методе 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() будет лаять как БОЛЬШАЯ собака. Это одна из впечатляющих возможностей объектно-ориентированного программирования.
