Кто мне может объяснить..
Fox bigFox = new BigFox();
System.out.println(bigFox.getName());
System.out.println(bigFox.getColor());
Вот в этих 3х строчках, мы создаем объект класса BigFox, и присваиваем ссылку на него в переменную bigFox типа Fox , а это значит, что несмотря на то что у нас объект типа BigFox, но он может использовать только методы которые объявлены в Fox ? Или я ошибаюсь?
И еще вопрос, вот в этом куске кода
public static class BigFox extends Fox {
public Color getColor() {
return Color.GRAY;
}
Функция public Color getColor() то есть возвращаемый параметр должен быть типа Color, но нигде в коде программы мы этот тип не определили, как такое может быть? И вот эта строчка тоже непонятна return Color.GRAY; как мы можем возвращать что то неопределенного типа, и что такое .GRAY;
То есть пример компилируется и выполняется, но не понятно каким образом.
public class Solution {
public static void main(String[] args) throws Exception {
Fox bigFox = new BigFox();
System.out.println(bigFox.getName());
System.out.println(bigFox.getColor());
}
public interface Animal {
Color getColor();
}
public static abstract class Fox implements Animal {
public String getName() {
return "Fox";
}
}
public static class BigFox extends Fox {
public Color getColor() {
return Color.GRAY;
}
}
}