수업관련
생성자 메서드 ,추상 클래스,추상 메서드
김대니
2020. 4. 27. 13:32
class Main {
public static void main(String[] args) {
사람 a김철수 = new 김철수();
사람 a김영희 = new 김영희();
a김철수.배달_음식_주문하다();
// 영화반점에서 김철수(010-1234-1234)에게 매운 짬뽕(을)를 배달합니다.
a김영희.배달_음식_주문하다();
// 북경반점에서 김영희(010-4321-4321)에게 안매운 짬뽕(을)를 배달합니다.
a김영희.a좋아하는_음식점 = a김철수.a좋아하는_음식점;
a김영희.선호하는_음식의_매운정도 = "아주 매운";
a김영희.선호하는_음식 = "짜장";
a김영희.배달_음식_주문하다();
// 영화반점에서 김영희(010-4321-4321)에게 아주 매운 짜장(을)를 배달합니다.
}
}
class 사람 {
String 이름;
String 전화번호;
String 선호하는_음식의_매운정도;
String 선호하는_음식;
음식점 a좋아하는_음식점;
void 배달_음식_주문하다() {
a좋아하는_음식점.주문(이름, 전화번호, 선호하는_음식의_매운정도, 선호하는_음식);
}
}
class 김영희 extends 사람 {
김영희() {
this.이름 = "김영희";
this.전화번호 = "010-4321-4321";
this.선호하는_음식의_매운정도 = "안매운";
this.선호하는_음식 = "짬뽕";
this.a좋아하는_음식점 = new 북경반점();
}
}
class 김철수 extends 사람 {
김철수() {
this.이름 = "김철수";
this.전화번호 = "010-1234-1324";
this.선호하는_음식의_매운정도 = "매운";
this.선호하는_음식 = "짬뽕";
this.a좋아하는_음식점 = new 영화반점();
}
}
//개발자들간의 의사소통을 위해 만들어진 명령어. 추상 클래스,추상 메서드.
//오직 리모컨만 쓰이는 클래스.
abstract class 음식점 {
// 오직 버튼만 만드는 추상메서드.
String 음식점이름;
void 주문(String 이름, String 전화번호, String 맵기, String 음식) {
System.out.println(음식점이름 + "에서 " + 이름 + "(" + 전화번호 + ")" + "에게 " + 맵기 + 음식 + "(을)를 배달합니다.");
}
}
class 영화반점 extends 음식점 {
영화반점() {
음식점이름 = "영화반점";
사람과 음식점 class 에 쓰인 '개체이름'() {} 은 생성자 메서드를 생성할때 쓰이는 명령어이다. 생성자 메서드는 그 자체로서 설정값을 만들 수 있고, 생성시에 설정을 할 수 있다.
생성자는 자바 클래스의 멤버가 아니고, 상속되지 않는다. 오버라이딩도 불가능하다.
그렇다면 생성자는 메소드가 아닌걸까?
생성자의 이름은 메소드와는 달리 반드시 클래스 이름하고 같아야 한다고 한다.
그러나 생성자는 메소드 안에 있다.
모르겠다.
추상 클래스와 메서드는 개발자들간의 의사소통을 위해 만들어진 명령어이고, "이곳은 건들지 마시오"라는 뜻이 있다고 한다.