Суперкласс и Подкласс в Java [дубликаты]

На этот вопрос уже есть ответ:

Что значит «программировать на интерфейс»? 31 ответ

Для тебя это может быть очень просто, но я понятия не имею, в чем разница. Я просто хочу узнать разницу между этими двумя кодами. Предположим, у меня есть несколько кодов, как описано ниже.

Первый класс - это Animal, который станет Суперклассом

public class Animal {

    private String name;
    private int weight;
    private String sound;

    public void setName(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }

    public void setWeight(int weight){
        if(weight > 0){
            this.weight = weight;
        } else {
            System.out.println("Weight must be bigger than 0");
        }
    }

    public int getWeight(){
        return weight;
    }

    public void setSound(String sound){
        this.sound = sound;
    }

    public String getSound(){
        return sound;
    }
}

Второй класс - собака, которая расширяет класс Animal

public class Dog extends Animal {

    public void digHole(){
        System.out.println("Dig a hole");
    }

    public Dog(){
        super();

        setSound("bark");
    }
}

Последний класс - это WorkWithAnimals, который будет печатать вывод

public class WorkWithAnimals {

    public static void main(String args[]){

        Dog fido = new Dog();

        fido.setName("Dadu");
        System.out.println(fido.getName());

        fido.digHole();
        fido.setWeight(-1);
    }
}

Мой вопрос: в чем разница между Animal fido = new Dog () и Dog fido = new Dog ()?

Так как Dog уже расширяет Animal, почему мы должны писать код, подобный Animal fido = new Dog ()?

Оба из них выводят один и тот же результат, не так ли?

Ответы на вопрос(6)

Ваш ответ на вопрос