일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 자바스크립트
- 추상클래스
- 배열
- 코딩테스트
- Spring
- 삼항연산자
- Oracle
- int와 integer
- java
- 깃허브
- 콘솔게임
- Sort()
- qqOperater
- 오류
- Node.js
- push함수
- app.use
- git
- 다형성
- 리액트
- React
- mybatis
- 네임드생성자
- Pug
- 자바
- Middleware
- 생성자
- js
- dart
- DB
- Today
- Total
평행코드
다형성 추상클래스와 인터페이스 본문
상속을 이용해 부모 타입으로부터 파생된 여러 가지 타입의 자식 객체를
부모 클래스 타입 하나로 다룰 수 있는 기술
상속관계에 있어야함!!
클래스 형변환
* 업 캐스팅(Up Casting)
상속 관계에 있는 부모, 자식 클래스 간에 부모타입의 참조형 변수가
모든 자식 타입의 객체 주소를 받을 수 있음
// Sonata 클래스는 Car 클래스의 후손
Car c = new Sonata();
// Sonata클래스형에서 Car클래스형으로 바뀜
// 부모 클래스타입에 자식객체가 저장될때 upcasting
// 부모 클래스타입에 저장되면 부모에 선언된 내용만 접근이 가능하다.
* 다운 캐스팅(Down Casting)
Person person;
person = new Teacher();
// 자식에 선언되어있는 내용에 접근하려면 downcasting(강제형변환) 해야한다.
((Teacher)person).getCareer();
// .이 우선하기때문에 형변환을 먼저하려면 괄호를 쳐주어야 한다
객체배열과 다형성
다형성을 이용하여 상속 관계에 있는 하나의 부모 클래스 타입의
배열 공간에 여러 종류의 자식 클래스 객체 저장 가능
People[] peopleArr = new People[5];
peopleArr[0] = new Student();
peopleArr[1] = new Employee();
peopleArr[2] = new Teacher();
instanceof 연산자
현재 참조형 변수가 어떤 클래스 형의 객체 주소를 참조하고 있는지 확인 할 때 사용하는 연산자
클래스 타입이 맞으면 true, 맞지 않으면 false를 반환
if(레퍼런스 instanceof 클래스타입) {
//true일때 처리할 내용, 해당 클래스 타입으로 down casting
}
if(p instanceof Student) {
System.out.println(((Student)p).info());
//p를 Student로 형변환해주고 info를 프린트해줘
}
else if(p instanceof Employee) {
System.out.println(((Employee)p).info());
}
else if(p instanceof Teacher) {
System.out.println(((Teacher)p).info());
}
p instanceof Student
// p가 Student기반으로 만들어졌니?
추상 클래스와 추상메소드
몸체 없는 메소드를 포함한 클래스
추상 클래스일 경우 클래스 선언부에 abstrace 키워드 사용
*장점
일관된 인터페이스 제공
꼭 필요한 기능 강제화(공통적이나 자식클래스에서 특수화 되는 기능)
public abstract class SmartPhone {...}
추상메소드
몸체 없는 메소드
추상 메소드의 선언부에 abstract 키워드 사용
상속 시 반드시 구현해야 하는, 오버라이딩이 강제화되는 메소드
자식클래스에서 무조건 사용하게 만듦
public abstract String printInfomation();
인터페이스
1. 모든 인터페이스의 메소드는 묵시적으로 public이고 abstract
2. 변수는 묵시적으로 public static final,
따라서 인터페이스 변수의 값 변경 시도 시 컴파일 시 에러 발생
3. 객체 생성은 안되나 참조형 변수로는 가능
* 장점
상위 타입 역할로 다형성을 지원하여 연결
- 해당 객체가 다양한 기능 제공 시에도 인터페이스에 해당하는
기능만을 사용하게 제한 가능
- 공통 기능 상의 일관성 제공
- 공동 작업을 위한 인터페이스 제공
[접근제한자] interface 인터페이스명 {
// 상수도 멤버로 포함할 수 있음
public static final 자료형 변수명 = 초기값;
// 추상 메소드만 선언 가능
[public abstract] 반환자료형 메소드명([자료형 매개변수]);
// public abstract가 생략되기 때문에
// 오버라이딩 시 반드시 public 표기해야 함
}
public interface Phone {
public abstract String makeCall();
String takeCall();
}
// CellPhone이라는 인터페이스를 생성 Phone, Camera를 상속받을수도 있다!
public interface CellPhone extends Phone, Camera{
String charge();
}
추상클래스와 인터페이스비교
구분 | 추상 클래스 | 인터페이스 |
상속 | 단일 상속 | 다중 상속 |
구현 | extends 사용 | implements 사용 |
추상 메소드 | abstract 메소드 0개 이상 | 모든 메소드는 abstract |
abstract | 명시적 사용 | 묵시적으로 abstract |
객체 | 객체 생성 불가 | 객체 생성 불가 |
용도 | 참조 타입 | 참조 타입 |
'Java' 카테고리의 다른 글
자주쓰는 Exception (0) | 2023.09.21 |
---|---|
Iterator , 동등성비교(equals @Override) (0) | 2023.09.20 |
오버라이딩과 오버로딩 (0) | 2023.09.13 |
상속이란? 그리고 super (0) | 2023.09.12 |
객체배열 (0) | 2023.09.11 |