티스토리 뷰
#1 상속
- 상속은 기존의 클래스를 재활용해 새로운 클래스를 작성하는 것입니다.
- 재사용에 유용합니다.
- java에서 상속은 "클래스명 extends 부모 클래스"처럼 extends 키워드를 사용합니다.
- java는 다중 상속을 허용하지 않습니다.
- 다중 상속은 하위 클래스의 코드를 복잡하게 만들어 프로그램을 취약하게 만들고, 버그를 유발할 수 있으며 유지 보수하기 어렵게 만들기 때문입니다.
- (is-a) 관계에 사용합니다. 동물 -> 포유류 -> 늑대
- 모든 클래스는 Object 클래스의 자식 클래스입니다.
public class 부모클래스 {
}
public class 자식클래스 extends 부모클래스 {
}
"super"키워드
- 자식 클래스에서 부모 클래스의 멤버를 참조할 때 사용합니다.
- this는 자기 자신을 가리킬 때 사용했는데 super는 부모를 가리킨다.
public class JavaTest {
public static void main(String[] args) {
자식클래스 sample = new 자식클래스();
sample.print();
}
}
class 부모클래스{
String name = "나는 부모!";
}
class 자식클래스 extends 부모클래스 {
String name = "나는 자식!";
public void print(){
System.out.println(super.name); // 출력값 : "나는 부모!"
}
}
"super()"키워드
- 부모 클래스의 생성자를 호출합니다.
- 자식 클래스의 생성자에서만 사용할 수 있습니다.
- super() 키워드는 생성자 가장 위에 기술되어야 합니다.
- super() 키워드를 기술하지 않아도 컴파일러가 끼워 넣어줍니다.
#2 메소드 오버 라이딩(재정의)
부모 클래스로 상속받은 메서드를 재정의하는 것을 오버 라이딩이라 합니다.
오버 라이딩은 다음 조건을 만족해야 합니다.
- 이름
- 매개변수들 (개수, 타입)
- 반환 타입
public class JavaTest {
public static void main(String[] args) {
자식클래스 sample = new 자식클래스();
sample.print();
}
}
class 부모클래스{
public void print(){
System.out.println("나는 부모!");
}
}
class 자식클래스 extends 부모클래스 {
@Override
public void print() {
System.out.println("나는 자식!"); // 출력값 : "나는 자식!"
}
}
자식 클래스는 부모 클래스의 print() 메서드를 재정의 한 모습입니다. "나는 자식!"이 출력하게 오버 라이딩했기 때문에 실행하면 "나는 자식! 이 출력되는 것을 확인할 수 있습니다.
주의! - 오버 로딩과 오버 라이딩은 같은 건가...?
비슷하기에 헷갈릴 수 있는데
오버 로딩 - 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다는 것.
- 이를 통해 메서드의 이름을 많이 만들 필요 없습니다. (메서드 네이밍 고민할 필요 없어진다.)
- 같은 기능을 하는 메소드 하나의 이름으로 사용이 가능합니다.
#3 추상 클래스(abstract class)
메서드가 선언만 된. 구현이 되어있지 않은 메서드를 추상 메서드라 부릅니다.
이러한 추상 메서드가 한 개라도 존재한다면 class 앞에 abstract를 붙여 추상 클래스로 선언하면 됩니다.
abstract class 추상클래스{
String name = "코코용";
int level = 0;
public void print(){} //추상메서드
public void upLevel(){
this.level++;
}
}
추상 클래스를 상속받았다면 추상 메서드를 구현하고 인스턴스화 하면 됩니다. 만약 추상 클래스를 상속받았지만 구현하지 않았다면 상속받은 클래스도 추상 클래스가 됩니다.
추상 클래스 특징
- 완벽하게 구현되어 있지 않기에 인스턴스 화가 불가능합니다.
- 추상 클래스는 새로운 일반 클래스를 위한 부모 클래스의 용도로만 사용됩니다.
#4 "Final 키워드"
- 클래스에 선언 시
- 해당 클래스의 상속을 금지합니다.
- 변수 선언 시
- 해당 필드 값이 변경되는 것을 금지합니다. (해당 필드에서 초기화하지 않았다면 생성자를 통한 초기화 강제)
- 메서드 선언시
- 해당 클래스 타입을 상속받는 서브, 하위 클래스에서 오버 라이딩을 금지합니다.
'개발 > java' 카테고리의 다른 글
[Java] 소수점 이하 0으로 채우기 (0) | 2022.10.13 |
---|---|
[Java] 인터페이스 (0) | 2022.04.08 |
[Java] 클래스, 메소드, 생성자 정의 방법 (0) | 2022.03.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday