super 는 상속때문에 생기게된 키워드. super() 는 부모클래스의 생성자 호출을 의미한다.
예를들어 Main에서 new Dog()를 실행하면 1번 화살표를 따라 갈 것이다.
그러면 Dog class를 생성할 때 new Dog()에서 ()에 아무 파라미터도 없으므로 2번 화살표와 같이 이동한다.
만약()에 Dog b처럼 있었다면 2번 화살표 아래 보이는 public Dog(String name, int age){ ...} 로 이동했을 것이다.
아무튼, 생성자를 보니까 super라는 녀석이 보인다. super는 부모클래스를 생성하고 초기화 하는 역할을 한다.
왜 부모 클래스를 생성할까? extends .. 즉 상속을 하기위해선 먼저 부모클래스를 만들어야하기 때문이다.
부모 없이는 자식도 없으니깐.
아무튼, super()에 의해 3번 화살표로 이동해서 Animal class를 생성한다.
화살표로는 빠져있는데 super()에서 ()안에 아무런 파라미터도 없으므로 Animal class에서
생성자인 public Animal(){...} 가 실행된다. 그래서 결과 화면을 보면 가장 먼저 new Dog()에서 여기까지 왔음이 출력되고 나머지 녀석들이 출력되는 것이다.
각설하고, 3번 화살표를 따라 Animal 클래스가 한줄씩 모두 실행되면 4번 화살표에 따라 다시 Dog 클래스로 돌아가서
순서대로 한줄, 한줄 실행된다. 이상으로 super의 설명을 끝내겠다.