| 여러종류의 객체를 배열로 다루기
다형성 장점: 다형적 매개변수
하나의 배열에 여러종류 객체 저장
Product p[ ] = new Product[3];
p[0] = new Tv();
p[1] = new Computer();
p[2] = new Audio();
//public class Vector extends AbstractList 가변배열기능
implements List, Cloneable, java.io.Serializable {
protected Object elementData[ ];
...............
}
class Buyer {
int money = 1000;
int bonusPoint = 0;
product [ ] cart = new Product[10];
int i = 0;
void buy(Product p) {
if (money < p.price) {
System.out.println("잔액부족");
return;
}
money -= p.price;
bonusPoint += p.bonusPoint;
cart[i++] = p;
}
}
Ex7_9
| 추상클래스, 추상메서드
추상클래스: 미완성 클래스, 미완성 메서드를 갖고 있는 클래스
abstract class Player {
abstract void play(int pos); //{ }이 없는 메서드, 추상메서드
abstract void stop();
}
//abstract 붙이면 오류안남
//설계도가 미완성이면 제품생성불가, 즉, 인스턴스 생성 불가. but 다른 클래스 작성에 도움
//extends로 자손에서 구현
메서드 → 선언부+구현부{ }
자손마다 다르게 구현될 것으로 예상되는 경우, 추상메서드로 작성
abstract class Player {
boolean pause; //iv
int currentPos;
player ( ) { //추상클래스의 생성자
pause = false;
currentPos = 0;
abstract void play(int pos); //추상메서드
abstract void stop( );
void play( ) { //상속, 자손객체생성 후 인스턴스메서드 호출가능
play(currentPos);
}
}
| 추상클래스의 작성
기존 클래스의 공통부분을 뽑아서 추상클래스를 만들기도 함
public class Ex7_10 {
public static void main(String[] args) {
Unit[] group = { new Marine(), new Tank(), new Dropship() };
for (int i = 0; i < group.length; i++)
group[i].move(100, 200);
} //객체배열: 참조변수를 묶은 것
}
abstract class Unit {
int x, y;
abstract void move(int x, int y);
void stop() { }
}
class Marine extends Unit {
void move(int x, int y) {
System.out.println("Marine[x=" + x + ",y=" + y + "]");
}
void stimPack() { }
}
class Tank extends Unit {
void move(int x, int y) {
System.out.println("Tank[x=" + x + ",y=" + y + "]");
}
void changeMode() { }
}
class Dropship extends Unit {
void move(int x, int y) {
System.out.println("Dropship[x=" + x + ",y=" + y + "]");
}
void load() { }
void unload() { }
}
설계도를 쉽게 작성, 관리가 용이, 중복제거
GregorianCalendar cal = new GregorianCalendar(); //구체적
Calendar cal = Calendar.getInstance(); //추상적
| 인터페이스의 선언, 상속, 구현
(핵심)추상메서드의 집합, 모든 멤버가 public
추상클래스 vs 인터페이스
//인터페이스는 iv, 생성자, 인스턴스 메서드를 가질 수 없다
but, 상수, 추상메서드, static매서드, 디폴트메서드 가능
interface 이름 {
public static final 값;
public abstract 메서드이름();
}
//public, abstract는 일부나 전부 생략가능
다중상속이 가능하고, 인터페이스만 조상이 가능
추상메서드는 충돌해도 문제 없음
interface Fightable extends Movable, Attackable { }
인터페이스의 구현 //추상클래스 구현과 유사
class 이름 implements 인터페이스이름 { }
interface Fightable {
void move ( int x, int y ); //public abstract 생략
void attack( Unit u );
}
class Fight implements Fightable {
public void main (int x, int y) { }
public void attack( Unit u ) { }
}
'Java' 카테고리의 다른 글
18 [인강] 자바의정석 ch08 (0) | 2020.12.29 |
---|---|
17 [인강] 자바의정석 ch07 (0) | 2020.12.28 |
15 [인강] 자바의정석 ch07 (0) | 2020.12.23 |
14 [인강] 자바의정석 ch07 (0) | 2020.12.22 |
13 [인강] 자바의정석 ch07 (0) | 2020.12.21 |
- 오늘의코딩
- 정보처리기사 실기
- ubuntu
- jdbc
- 정보처리기사 필기
- 호스팅영역
- 노마드코더
- java
- spring
- 독서후기
- 북클럽
- gradle
- 개발도서
- 노개북
- filezila
- EC2
- 기술블로그
- git연동
- 웹페이지만들기
- AWS
- 배포
- intellij
- JIRA
- gradle build
- IT 5분 잡학사전
- 정보처리기사
- putty
- 실용주의프로그래머
- LifecycleException
- SQLD
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |