● 상속의 특성
부모클래스의 메소드를 자손 클래스에서 이어받아 사용할 수 있다.
부모클래스의 메소드
================
자손클래스의 메소드
1. 자바상속의 특징
1)다중상속을 지원하지 않는다.(부모 클래스가 여러개일 수 없다)
예)GamingMouse extends Mouse, WheelMouse (x)
2)상속의 횟수에 제한을 두지 않는다(부모 클래스에 자손클래스가 여러 개 있을수 있다).
예)GamingMouse extends WheelMouse
->Mouse를 상속받은 WheelMouse를 상속받을 수 있다.
3) 모든 클래스는 java.lang.Object를 상속받는다(최상위 클래스).
2. 다형성
● 같은 기능을 호출하더라도 객체에 따라 다르게 동작하는 것
● 상위클래스의 동작을 하위클래스에서 다시 정의하여 사용하는 것도 다형성에 포함된다.
->오버라이딩(Overriding)=재정의
예)리모컨에서 ▶버튼을 눌렀을 때 컴퓨터, TV에서 각각 다른 동작이 수행됨
오버로딩(중복정의) | 오버라이딩(재정의) | |
공통점 | 메소드명이 중복된다 | |
차이점 |
*리턴타입이나 접근제한자는 상관없음 |
|
기존에 없는 새로운 메소드 생성 |
|
3. 레퍼런스 변수의 Casting(형 변환)-상속관계의 클래스일 경우
1)Upcasting
● 하위클래스가 상위클래스의 타입으로 “자동” 타입변환(다형성)
● 상위클래스의 변수, 메소드만 접근가능/하위클래스에서 확장한 메소드는 접근불가
● 단, 하위클래스가 상위클래스의 메소드를 오버라이딩 한 경우 하위클래스의 메소드 호출
(하위클래스에서 상위클래스와 동일한 메소드의 내용을 변경한 경우 변경한 내용이 출력)
● 사용방법
상위클래스 변수명 = new 하위클래스();
변수명.메소드;
예)ParentStore ps = new ChildStore();
ps2.makeSuta();
ps2.makeBibim();
ps2.makeTangsu();(x)
→상위클래스로 형변환된 경우 하위클래스에서 확장한 메소드를 사용할 수 없다.
2)DownCasting
● 상위클래스로 업캐스팅된 하위클래스가 하위클래스의 타입으로 “강제” 타입변환
● 상위클래스로 간 하위클래스를 다시 하위클래스로 불러오는 기능
● 사용방법
하위클래스명 변수명 =new 하위클래스();
변수명 = (하위클래스명 타입)상위클래스로 업캐스팅된 하위클래스 변수명
변수명.메소드;
예)ChildStore cs3 =new ChildStore();
cs3 = (ChildStore) ps2; 부모클래스로 간 하위클래스를 (하위클래스)를 붙여 새로운
하위클래스 변수명에 담아준다.
cs3.makeSuta(); ->부모클래스의 기능
cs3.makeBibim(); ->부모클래스의 기능
cs3.makeTangsu(); ->자식클래스의 기능
(잘못된 예시)
ChildStore cs2 =(ChildStore) new ParentStore();
cs2.makeSuta();
cs2.makeBibim();
cs2.makeTangsu();
4. 오버라이딩
● 하위클래스에서 상위클래스와 동일한 메소드를 재정의하는 것
● 오버라이딩 자동완성: 우측마우스-Source-Override/Implement method 활용하기
● 오버라이딩 확인하기: @Override 입력하고 메소드명에 오류나는지 확인하기!
5. 추상화(키워드 abstract)
● 객체에서 공통된 속성과 행위를 추출하는 기법
● 상세한 정보는 무시하고 필요한 정보들만 간추려서 구성
1)추상 클래스
● 한 개 이상의 추상메소드를 가지고 있는 클래스(필수요건x)
● 추상메소드가 없어도 class 앞에 abstract가 쓰여있으면 추상클래스가 될 수 있음
(일반메소드도 구현가능하다)
● 추상클래스 선언: 클래스명 앞에 abstract 입력하기
● 역할: 하위클래스로부터 상속받는 기능만 한다. 하위클래스에 오버라이딩 강제
● 추상클래스는 객체를 생성할 수 없다(상속한 하위클래스는 객체 생성가능).
2)추상메소드
● 바디가 구현되지 않은 메소드
● 하위클래스에서 ‘반드시’ 오버라이딩하여 구현해야 하는 메소드
● 추상메소드 선언: 접근제한자 (abstract 입력) 리턴타입 메소드명
6. 업캐스팅된 하위클래스 ArrayList로 만들기
Doll, Ryan등은 기본타입처럼 타입에 해당한다.
배열리스트의 문법에 맞춰 똑같이 작성한다.
배열값 불러오기
dList의 0번째 인덱스값은 ryan이므로 ry.pick();=dList.get(0).pick();은 같은 의미이다.
for문 이용하여 배열값 불러오기
랜덤으로 배열값 불러오기
'JAVA' 카테고리의 다른 글
[JAVA]15. 추상화&인터페이스 (0) | 2023.06.16 |
---|---|
[JAVA]14.디자인 패턴 (0) | 2023.06.15 |
[JAVA]12. 생성자 (0) | 2023.06.11 |
[JAVA]11. 객체지향 프로그래밍 (0) | 2023.06.10 |
[JAVA]10. ArrayList (0) | 2023.06.09 |