상속은 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 중복되는 코드를 줄여준다.
상속을 이용하면 부모 클래스의 수정으로 모든 자식 클래스들도 수정되는 효과를 가져오기 때문에 유지 보수 시간을 최소화할 수도 있다.
하나의 클래스가 다른 클래스를 상속받을 때 extends 키워드를 사용
상속하는 클래스를 '부모 클래스' 또는 상위 클래스(슈퍼 클래스) 또는 기본(기반)클래스(베이스클래스)
상속받는 클래스는 '자식 클래스' 또는 하위클래스(서브클래스) 또는 파생 클래스(유도 클래스)
프로그램에서는 자식이 부모를 선택한다. 선택된 부모 클래스는 extends 뒤에 기술한다.
자바에서도 자식 객체를 생성하면, 부모 객체가 먼저 생성되고 그다음에 자식 객체가 생성된다. 부모 생성자는 자식 생성자의 맨 첫줄에서 호출된다.
생성자가 명시적으로 선언되지 않았다면 컴파일러는 super(); 와 같은 기본 생성자를 생성한다.
매개변수 있는 생성자 함수를 호출하려면 명시적으로 super(매개변수);를 넣어주면 된다
부모 생성자와 자식 생성자 관계
자식 객체를 생성하면 우선 부모 생성자를 호출하고 다음으로 자식의 생성자를 호출
부모 생성자가 하나도 없는 경우라면, 자동으로 디폴트 생성자가 제공
부모 클래스에 생성자가 하나라도 제공되면 디폴트 생성자는 자동으로 제공되지 않음
모든 클래스느 기본적으로 최상위 클래스인 Object 클래스를 상속받고 있다.
최상위 클래스인 Object 클래스가 가지고 있는 메소드 중의 하나가 toString()메소드이고 system.out.println 메소드에 문자열이 아닌 객체를 넘겨주면 메소드 안에서 간접적으로 toString 메소드가 호출된다.
부모클래스의 메소드는 자식 클래스에서 얼마든지 사용. 그런데 만약에 같은 이름의 메소드가 부모 클래스와 자식 클래스에 모두 있다면 super 키워드를 이용하여 부모 클래스 멤버라는 것을 명시해야 함.
자식이 부모를 상속받았을 때 자식이 같은 이름의 필드명을 가지고 있는 경우, 부모의 필드 데이터를 가져오려면 super.필드명을 사용한다.
자식이 부모를 상속받았을 때 자식이 같은 이름의 메소드명을 가지고 있는 경우, 부모의 필드 데이터를 가져오려면 super.메소드명을 사용한다.
자바는 여러개의 부모를 상속받는 다중 상속을 허락하지않는다.
메소드 오버로딩: 한 클래스 내에서 메소드명은 같고 매개변수가 다른것
메소드 오버라이딩: 자식클래스에서 부모 클래스에 있는 메소드와 같은 형태를 갖는것.
클래스를 선언할 때 final 키워드를 class앞에 붙이면 이 클래스는 최종적인 클래스이므로 상속할 수 없는 클래스가 된다. 즉, final 클래스는 부모 클래스가 될 수 없어 자식 클래스를 만들수 없다.
final 클래스는 자식 클래스를 가질수 없다 즉, 자신이 마지막 클래스
상속 : 부모 클래스의 필드와 메소드를 자식 클래스에서 사용할 수 있도록 한다.
메소드 재정의 : 부모 메소드를 자식 클래스에서 다시 정의하는 것을 말한다.
final 클래스 : final 키워드로 선언된 클래스는 부모 클래스로 사용할 수 없는 final 클래스이다.
final 메소드 : final 키워드로 선언된 메소드는 자식 클래스에서 재정의할 수 없는 final 메소드이다.
final 필드는 프로그램 도중에 값 변경 금지 의미, 상속과는 크게 관련 없다.
final 클래스라고 해서 final 필드가 반드시 있어야 하는 것은 아니다.
다른 패키지에 있는 클래스를 가져다가 사용하려면 생성자함수의 접근제한자도 public이여야 한다!
'Java > information' 카테고리의 다른 글
| [자바/JAVA] 추상 클래스 (0) | 2023.05.02 |
|---|---|
| [자바/JAVA] 다형성 (0) | 2023.04.28 |
| [자바/JAVA] 헷갈리는 용어 정확하게 정리 (0) | 2023.04.25 |
| [자바/JAVA] 생성자 (0) | 2023.04.20 |
| [자바/JAVA] 객체와 인스턴스 (0) | 2023.04.18 |