상속 ( EX : Child extends Parent )
- 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것 ( 앞에서 말한 코드의 재사용)
- 두 클래스를 부모와 자식으로 관계를 맺어준다
- 자손 클래스는 조상의 모든 멤버를 상속받는다
- 생성자와 초기화블럭은 예외 . / 상속받지 않음.
- 자손 클래스는 조상클래스보다 멤버의 개수가 같거나 많다 ( 적을수 없다)
포함관계
- 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수로 선언하는 것
- class Point {int y;
- int x;
- class Circle {int r;
- Point c = new Point();
- 관계 설정시 상속인지 모를 경우
- is ~ a / ~는 ~다 : 상속관계
- has ~ a / ~는 ~을 갖고 있다 : 포함관계
- 90%는 포함관계이다
단일상속
- JAVA는 오직 단일상속(하나의 부모만 상속받는 것)만을 허용한다
- 비중이 높은 클래스만 상속받고 나머지는 포함관계이다
Object 클래스
- 모든 클래스의 조상
- 부모가 없는 클래스는 자동으로 Object를 상속하게 된다
- 모든 클래스는 Object의 정의된 11개의 메서드를 상속받는다
오버라이딩
- 상속받은 메서드의 내용을 자신에 맞게 변경하는 것
오버라이딩 조건
- 선언부가 조상과 일치해야한다
- 접근제어자를 조상클래스보다 좁은 범위로 변경 불가
- 조상메서드보다 예외를 많게 선언할 수 없다
오버로딩과 차이점
- 오버로딩은 자손에 없는 새로운 메서드를 정의 하는것 / 이름이 같고 매개변수가 다르다 ( new )
- 오버라이딩은 상속받은 메서드의 내용을 변경해서 사용 ( change / modify )
참조변수 super
- 참조변수 this와 비슷하다. 인스턴스 자신을 가리키는 참조변수
- 인스턴스 주소가 저장되어 있다
- 조상의 멤버와 자신의 멤버의 이름이 같을 때 구분하기 위해서 사용
super () - 조상생성자
- 조상의 생성자를 호출할때 사용한다.
- 생성자와 초기화 블럭은 상속이 안되기 때문
- 조상의 멤버는 조상의 생성자를 호출해서 초기화
- 조상의 멤버는 조상 본인이 초기화를 해야한다.
- 모든 클래스 생성자의 첫 줄에 반드시 생성자를 호출해야한다. 그렇지 않으면 컴파일러가 생성자의 첫줄에 super()를 삽입한다
패키지 ( 클래스 묶음)
- 클래스는 클래스 파일( *.class ) , 패키지는 폴더 / 하위패키지는 하위 폴더
- 클래스의 실제 이름은 패키지를 포함하고 있다
- java.lang.string
- 패키지의 선언 : package 패키지이름 ;
- 같은 소스파일의 클래스들은 모두 같은 패키지에 속하게 된다
클래스패스(환경변수)
- 클래스 파일( *.class ) 위치를 알려주는 경로
- 환경변수로 관리하여 경로간 구분을 ‘;’ (세미콜론) 을 사용한다 / 환경변수에 패키지 루트를 등록.
import문 ( ctrl + shift + o )
- 클래스를 사용할 때 패키지 이름을 생략할 수 있다
- 컴파일러에게 클래스가 속한 패키지를 알려준다
- 선언 방법
- import 패키명.클래스명
- java.lang 패키지 클래스는 import 없이도 사용가능 ( string , system , 1hread )
- 이름이 같은 클래스와 속한 두 패키지를 import 할 때는 클래스 앞에 패키지명
- import문 충돌시 코드에서 직접 지정해줘야 한다
static import문
- static 멤버를 사용할 때 클래스 이름을 생략하게 해준다
- Ex ) import static java.lang.Inteager;
- Ex ) import static java.lang.Math.random;
- Ex ) import static java.lang.System.out;
- System.out.println(Math.random()); ⇒ out.println(random () );
제어자
- 클래스 , 변수 , 메서드 선언부에 사용되어 부가적인 의미를 부여한다
- 접근제어자 : public > protected > ( default ) > private
- 그 외 : static , final , abstract 등
- 하나의 대상에 여러제어자를 조합하여 사용가능
- 접근제어자는 1개만 가질 수 있다
- 접근제어자를 맨 왼쪽에 놔야한다
Static : 클래스의 , 공통적인
- static은 멤버변수, 메서드, 초기화블럭에서 사용 ( 객체 생성 없어도 ) / 공통값을 가진다
- static은 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없다.
final : 마지막의 , 변경될 수 없는
- 클래스 : 변경 , 확장이 불가능한 클래스 / 상속계층도의 제일 마지막 / 자손없는 클래스
- 메서드 : 오버라이딩이 불가능한 메서드 ( 변경될 수 없는 )
- 변수 : ( iv , lv ) 상수
abstract : 추상 , 미완성
- 클래스 : 클래스안에 추상메서드가 있음을 의미 ( 미완성 설계도 )
- 메서드 : 선언부만 있고 { 구현부 } 가 없는 메서드 ( 추상 메서드 )
- abstract 클래스는 객체를 생성할 수 없고, 추상메서드를 갖고 있으니 상속받아서 완성해줘야 하는구나를 알려준다
접근제어자
제어자 같은클래스 같은패키지 자손클래스 전체
public | ㅇ | ㅇ | ㅇ | ㅇ |
protected | ㅇ | ㅇ | ㅇ | |
(default) | ㅇ | ㅇ | ||
private | ㅇ |
- 접근범위
- public > protectd > ( default ) > private
- 제한x > 같은패키지 + 다른패키지 자손 > 같은 패키지 > 같은 클래스
- 접근제어자를 사용하는 이유
- 외부로부터 데이터를 보호하기 위해서
- 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서
다형성
- 조상타입의 참조변수로 자손타입 객체(인스턴스)를 다루는 것
- 참조변수 타입에 따라 인스턴스의 사용할 수 있는 멤버의 개수가 달라짐 ( 자손의 멤버보다 같거나 적어야함 )
- 하나의 배열에 여러종류의 객체를 저장
- 참조변수 타입과 인스턴스 타입은 보통 일치하지만 일치하지 않을 수 있음
참조변수의 형변환 ( 리모콘을 변경함으로서) 사용할 수 있는 멤버이 개수를 조절하는 것
- 조상 , 자손관계의 참조변수는 서로 형변환이 가능하다
- 리모콘 기능이 많은쪽에서 적은쪽으로 줄이는건 자동형변환이 가능하다
- 적은쪽에서 많은 쪽으로 형변환을 할때는 자동형변환 X
instanceof 연산자
- 참조변수의 형변환 가능여부를 체크하는 연산자
- 형변환이 가능하면 True를 반환한다
- 형변환 전에 반드시 instanceof로 형변환이 가능한지 확인해봐야한다
- 주로 조건식에 사용한다 if ( 참조변수 instanceof 타입 클래스명 )
매개변수의 다형성
- 참조형 매개변수는 메서드 호출시 자신과 같은타입 또는 자손타입의 인스턴스로 넘겨줄 수 있다
여러종류의 객체를 배열로 다루기
- 조상 타입의 배열에 자손타입의 객체를 담을 수 있다
- 다루고 싶은 객체들의 상속관계를 따져서 가장 가까운 공통조상 클래스타입의 참조변수 참조변수 배열을 생성해서 객체들을 저장
'Java > 자바의정석' 카테고리의 다른 글
Java_날짜와 시간 & 형식화 (0) | 2023.08.06 |
---|---|
JAVA_java.lang패키지 , 유용한 클래스 정리 (자바의정석 9장) (0) | 2023.08.02 |
JAVA_예외처리 정리 (자바의정석 8장) (0) | 2023.07.26 |
JAVA _객체지향언어 개념 -3-(자바의정석 7장) (0) | 2023.07.19 |
JAVA _객체지향언어 개념 -1- (자바의 정석 6장) (0) | 2023.07.16 |