상속
기존 클래스의 자산(멤버)을 자식 클래스에서 재사용하기 위한 것 ( 부모의 생성자와 초기화 블록은 상속 X)
코드의 절감 → 부모의 코드 변경시 모든 자식들에게도 적용 → 유지 보수성 향상
상속의 적용 : extends 키워드 사용
항상 모든 클래스는 extends명령어를 사용하지 않으면 default로 Object를 상속한다.
상속의 관계
Person is a Object ( 상속의 관계는 is a 관계라고 함)
단일 상속 (Single Inheritance)
다중 상속의 경우 여러 클래스의 기능을 물려받을 수 있으나 관계가 매우 복잡해짐(다이아몬드 상속),
자바는 단일 상속만 지원
포함 관계
상속 이외에 클래스를 재활용 하는 방법
2개 이상의 클래스에서 특성을 가져 올 때 하나는 상속, 나머지는 멤버 변수로 처리
SpiderMan has a Spider
매서드 오버라이딩 ( Overriding)
조상 클래스에 정의된 메서드를 자식 클래스에서 적합하게 수정하는 것
오버라이딩의 조건
1. 메서드의 이름이 같아야함
2. 매개 변수의 개수, 타입, 순서가 같아야함
3. 리턴 타입 동일
Annotation
소스 코드에 붙여 놓은 라벨
@override : override실패시 오류 메세지 출력
Object 클래스
가장 최상위 클래스로 모든 클래스의 조상
toString 메서드
객체를 문자열로 변경하는 메서드 → @override를 이용해서 멤버출력
equals 메서드
객체의 주소 비교 : == 이용
객체의 내용 비교 : equals 재정의
super 키워드
super를 통해 조상 클래스 멤버에 접근
super( ) : 조상 클래스의 생성자 호출
명시적으로 this( ) or super( )를 호출하지 않으면 컴파일러가 super( ) 삽입
변수의 scope
사용된 위치에서 점점 확장해가며 처음 만난 선언부에 연결
method 내부 → 해당 클래스 멤버 변수 → 조상 클래스 멤버 변수
제한자
public, protected, private 등
static : 클래스 레벨의 요소 설정
final
final class : 더 이상 확장 할 수 없음 (상속 금지) → 오버라이드 방지
final method : 더 이상 재정의 할 수 없음 : overriding 금지
final variable : 상수화
접근 제한자
public, protected, package, private
OOP is A PIE (Object-Oriented Programming is Abstraction, Polymorphism, Inheritance, Encapsulation)
데이터의 은닉과 보호 ( Encapsulation )
변수는 private로 선언
Setter / Getter를 이용해 변수 설정 및 이용
다형성 ( Polymorphism )
하나의 객체가 많은 형(타입)을 가질 수 있는 성질
다른 타입의 객체를 다루는 배열을 Object로 담을 수 있음 ( 모든 클래스는 Object를 상속함)
기본형도 담을 수 있음 ( autoboxing )
매개 변수의 다형성
참조형 객체의 형 변환
Child에서 Super로 → 묵시적 형 변환
Super에서 Child로 → 명시적 형 변환
동적바인딩
class SuperClass{
String x = "super"
public void method()
sysout("Super")
}
class SubClass extends SuperClass{
String x = "sub"
@ Override
public void method()
sysout("Sub")
}
public class MemberBindingTest{
public static void main(String[] args) {
SubClass subClass = new SubClass()
System.out.println = new SubClass() // sub
subClass.method() // Sub
SuperClass superClass = subClass
System.out.println(superClass.x) // super
superClass.method() // Sub
}
}
동적바인딩 : 자식에서 오버라이딩 된 메소드가 있다면 그것을 사용함.
리뷰
객체지향 → 클래스를 이용하여 추상화
UML : Unified Modeling Language
클래스 : 설계도
속성(static 전역, instance 기본형, final 변경불가),
기능==Method (생성자, 일반)
클래스에 의해서 객체가 생성됨
클래스 조립(협업) : 상속 ( Is A - extends(단일 상속), Has A - composited, associated)
생성자의 궁극적 목적 : 인스턴스 변수를 초기화
생성자는 상속되지 않음!
Example)
public class 클래스이름A{
자료형 변수명; // 자료형 ⇒ int, char 등 → 기본형, Action 등 사용자 지정형태 → 참조형
public 클래스이름A( ){
}
public 클래스이름A( 자료형 변수명 ){ // 생성자의 오버로드
}
}
public class 클래스이름B extends 클래스이름A{
자료형 변수명;
public 클래스이름B( ){
}
public 클래스이름B(자료형 변수명){
}
}
this 생성자는 첫 줄에서만 호출 가능
'SSAFY > Daily' 카테고리의 다른 글
20220126 JAVA I/O & Stream (0) | 2022.02.04 |
---|---|
20220125 JAVA 예외처리 (0) | 2022.02.04 |
20220124 JAVA 추상클래스 (0) | 2022.02.04 |
20220118 JAVA 객체지향 프로그래밍 (0) | 2022.01.18 |
20220117 JAVA 기초수업 (0) | 2022.01.17 |
댓글