“한 언어를 깊게, 탄탄히 배우면 다른 언어는 독학할 수 있다. 독기로 공부해야한다.” - 강사님
제어자의 종류와 역할
- protected
- public
- package
오버라이딩(Overriding)
- 상속시에 적용되는 개념으로 부모로부터 상속 받은 메소드의 구현부를 재정의해서 사용하는 것
- 상속 관계에서 부모의 메소드를 리모델링(외관은 그대로 안에만 변경)
- 메소드명이 동일해야 한다. 메소드의 매개변수 갯수, 데이터 타입 및 순서가 모두 같아야 한다.
- 메소드의 반환 타입도 같아야 한다.
- 접근지정자는 부모와 같거나 넓어야 한다.
- Exception의 경우 부모 클래스의 메소드와 동일하거나 더 구체적인 Exception을 발생시켜야 한다.
- 인스턴스 변수가 부모타입이든 자식타입이든 무조건 오버라이딩한 메소드가 호출된다. 단, 오버라이딩을 하지 않았다면 당연히 상속받은 부모의 메소드가 호출된다.
- 만약 오버라이딩한 메소드 호출시 부모의 메소드를 사용하고자 한다면 super 키워드로 접근해서 재정의 하면된다.
- 부모타입의 인스턴스 변수로 자식에서 새롭게 확장한 멤버(변수,메소드등)에 접근하려면 형변환 해야 한다.
오버로딩(Overloading)
- 같은 이름의 메소드를 한 클래스 안에서 여러개 정의 가능( 양념 - 매개변수)
이질화(Heterogeneous)
- 두 클래스 사이에 상속관계가 존재할 때 부모 타입의 인스턴스 변수에 자식타입의 메모리 할당해서 그 주소를 저장한다.
- 부모타입 부모타입의 인스턴스변수 = new 자식타입 메모리 할당
- 자식에서 새롭게 정의한 멤버(변수, 메소드 등)는 접근이 불가능하다.
- 메소드의 매개변수를 부모타입으로 정의시 모든 자식타입을 저장할 수 있으므로 자식 클래스 수만큼 메소드를 오버로딩 할 필요없게 된다. ex) Object클래스의 객체 .equals(Object)
- 단, 부모타입의 인스턴스 변수를 자식타입으로 형변환(강제적 형변환 - 다운캐스팅)하면 자식에게 새롭게 정의한 멤버에 접근 가능하다.
- 동질화든 이질화든 오버라이딩한 메소드가 우선 호출된다.
동질화(Homogeneous)
- 같은 타입의 인스턴스 변수에 같은 타입의 메모리 주소를 저장
- 인스턴스 변수로 모든 멤버에 접근가능. 오버라이딩한 메소드가 존재할 경우 부모의 메소드가 아니라 오버라이딩한 메소드가 무조건 호출됨
instanceof 연산자
- 두 클래스간의 형 변환이 가능한지 판단하는 연산자이다.
- 해당 인스턴스 변수가 어떤 타입의 변수인지 판단하는 연산자
- 두 클래스간의 상속관계가 있어야 한다. 즉 is a 관계가 성립해야 한다. 당 인스턴스변수가 해당 타입이면 true ,아니면 false
- 형식 : 인스턴스변수 instanceof 클래스타입
- 상속관계 미 존재시 대입 연산 및 형 변환 불가하다. 상속관계가 없을때 instanceOf연산자 사용시 컴파일 에러가 발생한다.
참조형 사이의 형변환
- 두 클래간의 상속관계가 존재할때 형변환이 가능하다.
- 형 변환시 타입캐스팅 연산자 : (자료형) 사용
- 부모클래스 -> 자식클래스의 인스턴스에 저장(Down Casting)
- 자식클래스 -> 부모클래스의 인스턴스 저장(Up Casting)
업 캐스팅
- 부모의 인스턴스 변수 = 자식의 인스턴스 변수
- 묵시적 형변환
- 즉 캐스팅 연산자를 사용할 필요가 없다.
다운 캐스팅
- 자식타입의 인스턴스 변수= (자식타입)부모의 인스턴스변수
- 강제적 형변환. 즉, 캐스팅 연산자를 사용한다
- 만약에 부모의 인스턴스변수에 자식의 인스턴스 변수가 저장되어 있지 않다면 다운캐스팅 하더라도 실행시 에러
- 다운캐스팅 조건: 반드시 부모의 인스턴스 변수에 자식의 인스턴스 변수가 저장되어 있어야 한다.
Object 클래스
- 자바의 모든 클래스의 최상위 부모는 Object클래스이다.
- Object클래스의 toString()메소드는 객체의 주소를 String으로 반환해주는 메소드다
- Object클래스의 equals()메소드는 두 객체간의 인스턴스 비교할 수 있다. 즉 주소값 비교,주소가 같으면 true,다르면 false를 반환한다 .
Object클래스의 String toString()메소드
- 객체의 주소를 문자열로 반환한다. 패키지명.클래스명@주소(16진수)
- toString()메소드 오버라이딩 시 반드시 hashCode()메소드도 오버라이딩해야 한다.
Object클래스의 boolean equals()메소드
- 비교 클래스의 인스턴스변수.equals(대상클래스의 인스턴스변수) 두 객체의 주소비교한다.
'TIL' 카테고리의 다른 글
[23.04.05.] 국비지원 풀스택 개발자 과정 - Day 21(RDBMS, 오라클 자료형, SELECT문, SQL, SQL연산자,ORDER BY, 그룹함수, GROUP BY, HAVING) (1) | 2023.04.05 |
---|---|
[23.03.27.] 국비지원 풀스택 개발자 과정 - Day 14 (1) | 2023.03.27 |
[23.03.23.] 국비지원 풀스택 개발자 과정 - Day 12 (0) | 2023.03.23 |
[23.03.22.] 국비지원 풀스택 개발자 과정 - Day 11 (0) | 2023.03.22 |
[23.03.17.] 국비지원 풀스택 개발자 과정 - Day 8 (0) | 2023.03.18 |
댓글