1. 메소드 오버라이드 : 상속관계에서만 가능함
- 정의 : 부모클래스의 메소드를 자식 클래스에서 재선언하는것
- 사용방법 : 부모클래스의 메소드와 같은 형태의 머릿부를 동일하게 선언
- 기능 : 부모클래스의 메소드는 숨겨지고, 자식클래스의 메소드만 사용가능해짐
참고 ) @Overide 처럼 @붙여서 사용하는 것을 annotation(어노테이션)이라고한다.
2. 상속관계에서 참조변수와 인스턴스의 사용법
1. 부모 클래스 참조변수 = new 부모 클래스(); |
참조변수는 부모클래스 요소에 접근가능 |
2. 자식 클래스 참조변수 = new 자식클래스(); |
참조변수는 자식클래스의 요소 / 부모클래스 요소에 접근가능(상속받았으니까) |
3. 자식 클래스 참조변수 = new 부모클래스(); -> 불가능(아예 안되는 경우임) |
자식인스턴스가 존재하지 않음(존재하지 않는 자식인스턴스의 정보를 저장하라고 했기때문) 하고싶다면 4번경우에서 형변환을 사용하면 된다. |
4.부모클래스 참조변수 = new 자식클래스(); |
이렇게하면 참조변수의 자료형이 부모클래스가 되어버리므로, 자식클래스에 있는 메소드는 사용할 수 없게됨. 사용하고 싶다면 => 형변환을 하면된다. 형변환 1. 자동 형변환 : 묵시적 객체 형변환이라고도 한다. 2. 강제 형변환 : 명시적 객체 형변환이라고도 한다.★★★★★많이사용합니다. |
3. 오버라이딩
- 형변환을 하지 않아도 자식클래스의 메소드를 호출할 수 있는 방법이다.
- 부모가 자식것을 가져다 사용을 할 수 있게된다.(부모는 자신의 메소드를 숨기고 자식것을 쓸 수 있기 때문)
- 부모를 상속받는 자식은 여러명일 수 있다. 따라서 오버라이딩을 사용하게 되면 참조변수 하나가지고 자식클래스 모두에것을 가져다 사용할 수 있게된다.
- 만약(빨간선의 경우처럼)자식으로 인스턴스를 만들면 다른 자식클래스에 접근을 할 수 없으므로(비효율을 발생시킴) 4번 경우를 사용하는 것이다.
3-1. instaceof연산자
- 정의 : 상속관계를 구분하기 위한 연산자(반드시 자식클래스를 명확히 구분시켜 주어야 하므로)
- 사용방법 : 참조변수 instanceof 클래스(자식클래스)
- 기능 : 참조변수가 자식클래스로 형변환 가능한 경우(=상속관계에 있는 경우)true를 반환
- 명시적 객체 형변환을 하기 전에 사용하는 연산자이다.
3-2. 오버라이드에 의한 다형성
- 자식클래스에서 오버라이드를 했기 떄문에 묵시적인 객체 형변환이 일어남
- 자동으로 부모 인스턴스의 관련된 자식 인스턴스로 변환되어, 자식 메소드가 호출되어진다.
4. Objetc 클래스
- 모든 클래스가 반드시 상속 받는 최선조클래스
- 클래스를 선언할 때 상속받는 클래스가 없을 경우 자동으로 Object 클래스 상속
- 참조변수의 인스턴스 정보를 출력하면 Object 클래스의 toString() 메소드 자동 호출한다(Object클래스의 toString()메소드를 오버라이드 선언하여 사용한다.
// 필드값을 반환해서 필드값 확인하는 메소드로 활용한다
@Override
public String toString() {
return "소유주 = " + userName + ", 모델 명 = " + modelName;
}
5. final 키워드
4-1. final 필드
- 사용방법 : public static final 필드명 = 값; => "public + static + fianal 은 상수필드" 라고 부른다.
- 참고) final은 값이 바뀌지 않기 때문에 public과 static과 함께써도 문제가 없기 때문이다.
- 필드값을 변경할 수 없도록 만든다
- 무조건 값을 넣어 저장시킨다(생성자에 들어갈 수 없음)
- 값대신 사용하기 위한 고유명침
- final필드명은 모두 대문자로 작성하며 _를 사용하여 만든다
4-2. final 메소드
- 접근지정자 final 반환형 메소드명(파라메터,...)
- 기능 : 메소드 오버라이드 선언 불가능하게 한다.
4-3. final 클래스
- 사용 방법 : 접근지정자 final class 클래스명 { }
- 기능 : 상속을 불가능하게 하기 위해 사용함(오버라이드 하지 못하게 함). 즉, 부모클래스로 사용하지 못하게 한다.
5. 추상클래스->내일~~~
'💻 수업정리 (2020) > 자바' 카테고리의 다른 글
[5/28] java.lang패키지 (0) | 2020.05.28 |
---|---|
[5/27] ★★★ 예외전달, 다중스레드 (0) | 2020.05.27 |
[5/26] 접근지정자 , 자료형(클래스, 인터페이스, enum) (0) | 2020.05.26 |
[5/25] abstract 클래스/메소드, 패키지와 인터페이스 (0) | 2020.05.25 |
[5/21] 클래스와 상속, 인터페이스 (0) | 2020.05.21 |