(1) 상속성( Inheritance )
1) 부모의 '모든 것'을 자식에서 '상속'받는 것(=='사용'할 수 있는 것)
2) 다른 생성자가 하나도 없을 때 만 JVM이
( 자식객체가 생성되려면 먼저 부모객체가 생성되어야 함)
3) 모든 생성자의 첫라인에는 Super();가 생략되어 있음
( 단, 다른 super(...)가 있다면 예외)
4) 자식메소드에서 부모메소드의 내용을 변경할 수 있음( overriding )
5) 모든 객체는 Object의 자식 ( 묵시적 상속 )
6) 형변환
<1> 자동형변환 by JVM ( 자식 -> 부모 )
1> class Superman extends Human {}
Superman sm = new Superman();
Human m = sm;
<2> 강제형변환 by 개발자 ( 부모 -> 자식 )
1> 강제형변환은 한번 부모타입으로 바꾸었던 자식객체의 타입을 되찾을 때만 사용해야 한다.
2> 올바른 예시
ex) Superman sm2 = (Superman)m; ( O )
3> 잘못된 예시
ex) Human m2 = new Human();
Superman sm3 = m2; ( X )
7) 형제관계(남남)는 상속과 무관 ( 형변환X )
(2) 다형성( Polimorphism )
1) 같은 타입 객체의 같은 메소드가 '다른일'을 하는 것
2) 오버라이딩( Overriding )
<1> (상속관계에서)부모의 메소드 내용을 자식에서 바꾸는 것
<2> 조건
1> 메소드 이름이 일치해야 함
2> 반환타입이 일치해야 함
3> 파라미터의 타입과 순서와 갯수가 모두 일치되어야 함
4> 생성자 불가
5> 자식메소드의 접근제한자는 부모메소드의 접근제한자보다 같거나 넓어야 함
3) 오버로딩 ( OverLoading )
<1> 정의
1> (그형태에 따라 매핑되어 호출되도록 )파라미터의 종류나 순서나 갯수가 다른,
같은 이름의 메소드나 생성자를 '여러개 정의하는 것'
<2> 종류
1> 생성자
2> 메소드
<3> 특징
1> 반환타입과는 관련 없음
2> 상속관계라면 다른 클래스에서도 오버로딩이 가능
3> 형변환이 가능한 파라미터라도 오버로딩으로 인정
4) 인터페이스( interface )
<1> 정의
1> JDK7이하: '상수'와 '추상메소드'로 구성된 껍데기
2> JDK7이하: '상수'와 '추상메소드'와 'static메소드'와 'default메소드'로 구성된 껍데기
<2> 특징
1> 인터페이스 객체는 완벽한 자식클래스를 만들어서 객체 생성후 형변환해서 만듬
2> interface 의 static 메소드는 인터페이스 이름으로만 접근 가능
3> 자식클래스를 만들 때는 implements 를 사용하고 다중상속도 가능
4> 인터페이스끼리의 상속에는 extends 를 사용하고 다중상속도 가능
ex) interface Inter extends Inter1, Inter2, 등등...
5> 일반적인 형태의 자식클래스
ex) class Child extends Human implements Inter1, Inter2, ...)
6> 상수 앞에는 public static final 생략
7> 메소드 앞에는 public abstract 생략
8> 인터페이스 앞에는 abstract 생략
5) 추상클래스와 인터페이스 공통점/차이점
<1> 공통점
1> 추상메소드를 가질 수 있음
2> 완벽한 자식객체를 생성해서 형변환해서 객체를 생성
<2> 차이점
1> 클래스이고 인터페이스임
2> 추상클래스는 일반멤버(상수X)와 일반메소드와 생성자를 가질 수 있음
3> 클래스명 앞에 abstract 생략불가
(3) 은닉성( Information Hiding )
1) 외부프로그램으로부터 '속성값'을 감추는 것
<1> 멤버를 private 으로 놓고 선택적으로 메소드를 통해 접근하도록 하는 것
ex) private long balance = 10000L;
void setBalance(long balance){ //setter 메소드
this.balance = balance;
}
long getBalance(){ //getter 메소드
return balance;
}
(4) 캡슐화( Encapsulation )
1) 메소드의 구현 내용을 몰라도 그 형태만 알면 사용할 수 있는 것.
2) 메소드가 어떤 일을 하는지 알고, 그 이름만 안다면 호출해서 사용할 수 있는 것을 말한다.
3) 메소드의 사용법만 안다면 메소드 내부의 로직을 몰라도 사용할 수 있다.
'Java > Java' 카테고리의 다른 글
Java 08. 제한자( Modifier ) 와 식별자 ( Identifier ) (0) | 2022.03.10 |
---|---|
Java 07. 예외 처리 (0) | 2022.03.09 |
Java 05. 컬렉션 ( Collection ) (0) | 2022.03.09 |
Java 04. 배열 ( Array ) (0) | 2022.03.09 |
Java 03. 제어문 (0) | 2022.03.08 |