일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 비교
- 인티저 값 비교
- 무한 파라미터
- 멀티 페이지
- R 비교
- 마우스 올리면
- 옵션태그
- 2차원 list
- 값 비교
- R타입비교
- r타입 비교
- 플러터 null
- 배열 값
- jsp 테이블
- 2차원배열
- 값 추가
- jsp
- 배열 생성자
- 2차원 리스트
- String 검색
- 같은지
- String 찾기
- 값 넣기
- 리스트
- Integer 값 비교
- list
- 파라미터 무한
- select
- 마우스 올릴때
- 배열 값 추가
- Today
- Total
JAVA를 JAVA라
[JAVA] 상속과 오버라이드 본문
class Animal{
String name;
int age;
String breed;
String addr;
public void sleep() {}
}
1. 상속
클래스를 디자인 할 때 중복되는 코드가 있다면
이것을 상위 클래스에 몰아 넣고 내려받아 쓰는 것
코드 중복을 줄일 수 있습니다.
다형성으로 서로 연결할 수 있습니다.
super(); 부모 생성자 호출
super.메소드명(); 부모 메소드 호출
class Cat extends Animal{ //Animal의 자식/하위 클래스
//이 클래스의 고유 기능이라면
//자식 클래스에서 적어주면 사용 가능합니다.
//자식클래스에서 부모 메소드 수정해서 사용하기 : 오버라이드
@Override
public void sleep() {
//super.sleep(); //부모 메소드 호출하기
System.out.println("침대 위에서 잠을 잡니다.");
}
}
잠깐, 다형성이란?
Cat 클래스는 Cat c01 = new Cat(); 와 같이 생성할 수도 있고,
Animal c01 = new Cat(); 와 같이 생성할 수도 있습니다.
아래와 같이 만들면 c01은 Cat타입이기도, Animal타입이기도 합니다.
이것을 다형성 이라고 합니다.
다형성은 동적 바인딩(런타임 때 최종 타입이 결정되는 것)이 지원되어야 합니다.
같은 타입이지만 실행결과가 다양한 객체를 이용할 수 있는 성질을 말합니다.
코드 측면에서 보면 다형성은 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해줍니다.
다형성을 위해 자바는 부모 클래스로 타입 변환을 허용해줍니다.
즉 부모타입에 모든 자식 객체가 대입될 수 있습니다.
이것을 이용하면 객체는 부품화가 가능합니다.
2. 오버라이드 //상속! 재정의!!
상속 관계에서만 생성됩니다.
부모의 메소드를 자식 클래스에서 자신의 상황에 맞게 재정의 해서 사용하는 것
접근제어자, 리턴 타입, 파라미터는 그대로 가지고 와야 합니다.
메소드 오버라이드는 객체지향 언어에서 자주 사용됩니다.
상속받은 부모 메소드의 내용을 재정의해서
자식에 맞게끔 활용하는 것입니다.
주의할 점이 있습니다.
(1) 메소드의 형식은 상속받은 메소드와 동일해야 합니다.
(2) 접근제어자는 반드시 부모의 것과 같은 범위거나 더 큰 범위여야 합니다.
(3) 재정의된 메소드의 부모 메소드는 자식의 것에서는 은닉(Hide)되어지기 때문에 직접적으로는 더이상 호출되지 않습니다.
(4) 은닉 된 부모 메소드를 호출할 때엔 super라는 부모 객체를 호출하는 키워드를 통해 호출합니다.
@Override
public void sleep() {
//super.sleep(); //부모 메소드 호출하기
System.out.println("침대 위에서 잠을 잡니다.");
}
!! 주의
//이건 오버로드입니다!!파라미터값이 바뀐 같은 이름의 메소드이기 때문
public void sleep(String where) { //얘는 파라미터 값이 추가되었기 때문에 더이상 오버라이드가 아님!!
//super.sleep();
System.out.println("나는 " + where + "에서 잡니다.");
}
부모의 함수를 같은 이름으로 불러왔더라도 파라미터 값이 다르면 오버라이드가 아닌 오버로드 입니다.
'JAVA > JAVA 수업' 카테고리의 다른 글
[JAVA] 21.06.16 (0) | 2021.06.16 |
---|---|
[JAVA] Abstraction, 추상화 (0) | 2021.06.15 |
[JAVA & DB] 21.06.15 (0) | 2021.06.15 |
[JAVA] Linked List (0) | 2021.06.11 |
[JAVA] ArrayList의 값은 주소값이라고 생각하자 (0) | 2021.06.11 |