다형성&추상클래스&인터페이스
1. 다형성 polymorphism
- 여러가지 형태를 가질 수 있는 능력
- 상속 관계에서 성립 가능한 문법
- 참조형의 업 / 다운 캐스팅
(부모타입의 변수에 자식객체로 new 한것이 들어갈 수 있다)
1) instanceof 연산자
- 참조하는 변수가 가르키는 인스턴스(객체)의 실제 타입을 체크하는데 사용
참조변수 instanceof 클래스명 --> true / false -> a instanceof BClass
클래스명 : 나 ~ 조상까지 모두 true로 리턴 내 아래 자식이나 아예 다른 클래스는 false
2. 추상클래스
1) 개발할 때, 밑그림을 그리는 것. 설계쪽에 해당.
2) 키워드 : abstract
3) 추상메서드
- abstract 키워드를 붙여서 메서드의 선언부만 있고, 구현부는({코드작성...}) 되어있지 않은 형태
public abstract String getName();
public abstract void setName(String str);
4) 추상클래스
- 일반 멤버들과 함께 추상 메서드를 포함하는 클래스
- 추상메서드가 하나라도 있으면 무조건 추상클래스
- 클래스 앞에 abstract 붙히기
abstract class Shape {
...
abstract void draw(); //추상메서드
}
5) 추상클래스는 객체 생성 불가
- 불완전한 / 미완성인 클래스다.
Shape s = new Shape(); (x) // new 불가능
Shape s; (o)
6) 상속에서 슈퍼클래스로 사용된다.
- 부모클래스가 될 수 있다. (extends)
7) 추상클래스를 물려받은 서브클래스를 완성 시키려면,
- 추상 메서드를 오버라이딩 해야한다.
- 추상클래스를 단순히 상속만 받은 서브 클래스는
그 또한 추상 클래스가 된다. - 추상메서드를 그대로 상속받기 때문에
구현을 하지 않는다면 클래스 앞에 abstract 키워드를 붙여줘야한다.
# 추상클래스 단순 상속
abstract class Rect extends Shape { // 추상draw();
int width;
...
}
new Rect(); (x) 불가능하다.
# 추상클래스를 사용 할 때 -> 상속받아 구현
class Rect extends Shape {
int width;
...
@Override
void draw () {
// 추상메서드 구현코드 작성
}
}
new Rect(); (o) 가능하다.
3. 인터페이스 interface
- 규격이라고 생각하면 된다.
1) 키워드 : interface
interface PhoneInterface {
// 내용
}
2) 인터페이스 멤버는 추상메서드와 상수만으로 구성된다
interface PhoneInterface {
public static final 타입 변수명; // 상수
public static final int BUTTONS = 20;
public abstract 리턴타입 메서드명(); // 추상메서드만
public abstract void sendCall();
public abstract void receiveCall();
}
- 인터페이스 멤버는 누구나 접근가능하게 모두 public 접근지정자로 만듬!
3) 모든 메서드는 public abstract 이며, 생략가능하다.
void sendCall();
void receiveCall();
4) 상수는 public static final 이며, 생략가능하다.
- int BUTTONS = 20;
interface PhoneInterface {
int BUTTONS = 20; // 상수
void sendCall(); // 추상메서드
void receiveCall();
}
5) 인터페이스로 객체 생성 불가능
- 메서드는 모두 구현이 전혀 안된(미완성인) 추상메서드이므로...
6) 인터페이스로 레퍼런스 선언은 가능.
PhoneInterFace iPhone; (o)
...new PhoneInterFace; (x)
7) 인터페이스 상속
- 인터페이스는 다른 인터페이스를 상속을 받을 수 있다.
- 인터페이스는 규격과 같은 것으로, 상속을 통해
기존 인터페이스에 새로운 규격을 추가한 새로운 인터페이스를 만들 수 있다. - extends 키워드 사용
interface MobilePhoneInterface extends PhoneInterface {
void sendSMS();
void receiveSMS();
}
- 인터페이스는 다중 상속 허용
interface DualCameraPhoneInterface extends PhoneInterface, CameraInterface {
void makeVideo();
void makeVideo();
}
8) 인터페이스 구현 (사용하기)
- 인터페이스의 추상메서드를 모두 구현한 클래스를 작성하는 것.
- 키워드 : implements
class IPhone implements MobilePhoneInterface {
// 추상메서드 모두 구현
public void sendCall() {...}
public void receiveCall() {...}
public void sendSMS() {...}
public void receiveSMS() {...}
// 추가적으로 일반 메서드나 변수 작성
public int getButtons() {...}
...
}
- 추상 메서드중 하나라도 구현을 안하면 에러!
9) 인터페이스의 목적
- 설계, 가이드라인
- 다형성을 실현하는 도구
10) 인터페이스는 다중 구현
class IPhone implements MobilePhoneInterface, CameraInterface {
// 두개 인터페이스로부터 물려받은 추상메서드 전부 구현해야함.
}
Author And Source
이 문제에 관하여(다형성&추상클래스&인터페이스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jonny77/다형성-추상클래스-인터페이스저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)