class Main {
public static void main(String[] args) {
사람 a김철수 = new 김철수(); // 사람타입 김철수 생성
사람 a김영희 = new 김영희(); // 사람타입 김영희 생성
a김철수.배달_음식_주문하다();
a김영희.배달_음식_주문하다();
a김영희.a좋아하는_음식점 = a김철수.a좋아하는_음식점;
a김영희.선호하는_음식의_매운정도 = "아주 매운";
a김영희.선호하는_음식 = "짜장";
a김영희.배달_음식_주문하다();
}
}
class 사람 {
String 이름;
String 번호;
String 선호하는_음식의_매운정도;
String 선호하는_음식;
음식점 a좋아하는_음식점;
void 배달_음식_주문하다() {
a좋아하는_음식점.주문(이름, 번호, 선호하는_음식의_매운정도, 선호하는_음식);
}
}
class 김철수 extends 사람 { // 사람클래스 상속
김철수() { // 생성자 생성
이름 = "김철수";
번호 = "010-1234-1234";
선호하는_음식의_매운정도 = "매운";
선호하는_음식 = "짬뽕";
a좋아하는_음식점 = new 영화반점();
}
}
class 김영희 extends 사람 { // 사람클래스 상속
김영희() { // 생성자 생성
이름 = "김영희";
번호 = "010-4321-4321";
선호하는_음식의_매운정도 = "안매운";
선호하는_음식 = "짬뽕";
a좋아하는_음식점 = new 북경반점();
}
}
abstract class 음식점 { // 추상화클래스 음식점
String 식당이름; // 자식클래스에 넘겨줌
void 주문(String 주문자명, String 번호, String 매운정도, String 음식) {
System.out.println(식당이름 + "에서 " + 주문자명 + "(" + 번호 + ")에게 " + 매운정도 + " " + 음식 + "(을)를 배달합니다." );
}
}
class 북경반점 extends 음식점{
북경반점() { // 생성자 생성
식당이름 = "북경반점"; // 부모클래스에서 물려받은 속성
}
}
class 영화반점 extends 음식점 {
영화반점() {
식당이름 = "영화반점";
}
}
클래스 간의 구조설계
하나 이상의 추상메서드를 포함하는 클래스
추상메서드가 없어도 오류는 없음
클래스 내에서 구상 메서드 사용도 가능
추상메서드를 상속받은 자식클래스는 무조건 오버라이딩(재정의)를 해야함
- 추상메서드
abstract void run();
{} 몸통없이 바로 ;로 마무리
구조만 만들어두고 내용은 자식클래스에서 정의
import java.util.ArrayList;
class Main{
public static void main (String[] args) {
// 배열
String [] names = new String[2];
names[0] = "철수";
names[1] = "영희";
for (int i = 0; i < names.length; i ++) {
System.out.println(names[i]);
}
// ArrayList
ArrayList<String> name = new ArrayList<>();
name.add("철수");
name.add("영희");
for(int i = 0; i < name.size(); i ++) {
System.out.println(name.get(i));
}
}
}
- ArrayList의 길이 출력은 size()
- 출력 시에는 get(index)