Day15 :) 추상화
다형성발현의 필수사항
- 자식클래스들의 부모가 같아야함
- 부모클래스에서 받은 메서드를 자식클래스들이 오버라이딩해야함
- 사용하는 클래스에서 부모타입의 참조변수로 메서드를 사용해야 함
- 사용하는 클래스에서 생성자, Setter메서드를 통해 필요 객체를 제공받아야 함
추상화
- 공통된 속성과 기능을 추출하는 것
- 자바에서는 공통된 속성과 기능을 모아 추상클래스나 인터페이스를 정의하는 것을 의미
추상클래스
abstract class 클래스명{}
- 미완성 메서드인 추상메서드를 포함하고 있으며, 인스턴스는 생성 불가
- 상속을 통해 자손클래스에서만 완성 될 수 있음
- 생성자가 있으며 멤버변수나 메서드도 가질 수 있음
abstract class A{
public abstract int b(); // 추상메서드
public void d(){
System.out.println("world"); // 멤버변수 가질 수 있음
}
// 인스턴스생성불가하므로 오류
//public abstract int c(){System.out.println("Hello")}
}
추상메서드
abstract 리턴타입 메서드이름();
- 메서드의 선언부만 있는 것이 추상메서드
- 추상메서드를 상속받는 자식클래스는 오버라이딩을 통해 추상메서드를 모두 구현해주어야함
1. 추상클래스와 추상메서드
abstract class Parent{
abstract void sample1 (int x, int y);
abstract int sample2 ();
}
2. 자식클래스
class child1 extends Parent{
void sample1(int x, int y){ 수행문 입력 }
int sample2(){ 수행문 입력 }
}
class child2 extends Parent{
void sample1(int x, int y){ 수행문 입력 }
int sample2(){ 수행문 입력 }
}
추상클래스의 작성
- 기존 클래스와의 공통부분을 뽑아내어 부모클래스 작성
- 공통 특성을 한번에 관리하기 쉬우며, 배열화에도 용이
abstract class Unit{
abstract void move (int x, int y);
void stop();
}
class Marine extends Unit{
void move(int x, int y) // 추상클래스의 추상메서드(오버라이딩 해야함)
void stimPack(); //Marine의 고유 특성
// void stop()도 상속 된 상태
}
인터페이스
interface 인터페이스이름{}
- 추상클래스의 일종으로 추상화정도가 추상클래스보다 높음
- 오로지 추상메서드와 상수만 멤버로 가질 수 있음
- 접근제어자로 public과 default만 사용 가능
interface PlayingCard{
// 모든 멤버변수는 public static final~로 구성되어 있으며, 생략 가능함
public static final int SPADE = 4;
final int HEART = 3; // public static final int HEART
static int DIAMOND = 2; // public static final int DIAMOND
int CLOVER = 1; // public static final int CLOVER
// 모든 메서드는 public abstract~로 구성되어 있으며, 생략 가능함
public abstract String getCardNumber();
String getCardKind(); // public abstract String getCardKind
}
인터페이스의 구현
- implements 키워드 이용
interface Fightable {
/* 각 인터페이스에 정의된 추상메서드 전부 재정의
하나라도 재정의 되어있지 않으면 컴파일 에러 발생 */
void move(int x, int y); // public abstract void move
void attack(Unit u);
}
class Fighter implements Fightable{
public void move(int x, int y){}
public void attack(Unit u){}
}
- abstract키워드로 추상클래스로 선언하면 메서드 일부만 구현 가능
abstract class Fighter implements Fightable{
public void attack(Unit u){}
}
- 상속과 구현 동시에 가능
class Fighter extends Unit implemetns Fightable{
public void move(int x, int y){}
public void attack(Unit u){}
}
클래스와 인터페이스
구현클래스
- 하나 이상의 인터페이스를 구현한 클래스
- 인터페이스 내의 구현부 없는 메서드가 전부 재정의 되어야 함
- 인터페이스는 클래스간 결합을 느슨하게 만드므로, 확장에는 열려있고 변화에는 닫혀있음
Author And Source
이 문제에 관하여(Day15 :) 추상화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yoonee1126/Day15-추상화-인터페이스저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)