방법1
interface 인 PrintNameCard 클래스를 만들어 나머지 카드1,2에 상속 후 오버라이딩 해줌
메인에서
NameCard 객체 ncard 생성 후
"이름","전화번호","이메일" 을 넣어준 후
ncard . setPrintNameCard (new PrintNameCard2()); 로 대입해준 후
print()로 호출하면 값이 나옴.
NameCard에 인터페이스 PrintNameCard PrintNameCard 객체 생성 후
setPrintNameCard 메서드를 만들어
들어오는 매개변수 PrintNameCard p 값을 this . PrintNameCard에 새로 저장,
print메서드를 생성해 printNameCard.print( this ); -> this를 출력.
PrintNameCard1과 2는 원하는 정보만큼 오버라이딩 해줌.
Main
public class mainClass {
public static void main(String[] args) {
NameCard ncard = new NameCard("홍길동", "123-4567", "hgd@naver.com");
ncard.setPrintNameCard(new PrintNameCard2());
ncard.print();
//이름:홍길동
//전화번호:123-4567
//이메일:hgd@naver.com
ncard.setPrintNameCard(new PrintNameCard1());
ncard.print();//->이름:홍길동
NameCard nc = new NameCard("박유경", "123-123","abc@365.com");
nc.setPrintNameCard(new PrintNameCard2());
nc.print();
//이름:박유경
//전화번호:123-123
//이메일:abc@365.com
}
}
NameCard
public class NameCard {
String name;
String phone;
String email;
// class가 아닌 interface
PrintNameCard printNameCard;
public NameCard(String name, String phone, String email) {
super();
this.name = name;
this.phone = phone;
this.email = email;
}
public void setPrintNameCard(PrintNameCard p) {
this.printNameCard = p;
}
public void print() {
printNameCard.print(this);
}
}
PrintNameCard
public interface PrintNameCard {
public void print(NameCard nc);
}
PrintNameCard1
public class PrintNameCard1 implements PrintNameCard {
@Override
public void print(NameCard nc) {
System.out.println("이름:" + nc.name);
}
}
PrintNameCard2
public class PrintNameCard2 implements PrintNameCard {
@Override
public void print(NameCard nc) {
System.out.println("이름:" + nc.name);
System.out.println("전화번호:" + nc.phone);
System.out.println("이메일:" + nc.email);
}
}
(귀찮은) 방법2
인원이 늘어날 때마다 PrintNameCard 클래스를 새로 생성해 줘야 함.
Main
public static void main(String[] args) {
NameCard ncard = new NameCard("홍길동", "123-4567", "hgd@naver.com");
ncard.setPrintNameCard(new PrintNameCard());
ncard.print();//->이름:홍길동
ncard.setPrintNameCard2(new PrintNameCard2());
ncard.print2();
//->이름:홍길동
//전화번호:123-4567
//이메일:hgd@naver.com
}
}
NameCard
public class NameCard {
String name;
String phone;
String email;
PrintNameCard printNameCard;
public NameCard(String name, String phone, String email) {
super();
this.name = name;
this.phone = phone;
this.email = email;
}
public void setPrintNameCard(PrintNameCard p) {
this.printNameCard = p;
}
public void print() {
printNameCard.print( this );
}
PrintNameCard2 printNameCard2;
public void setPrintNameCard2(PrintNameCard2 p) {
this.printNameCard2 = p;
}
public void print2() {
printNameCard2.print( this );
}
}
PrintNameCard
public class PrintNameCard {
public void print(NameCard nc) {
System.out.println("이름:" + nc.name);
}
}
PrintNameCard2
public class PrintNameCard2 {
public void print(NameCard nc) {
System.out.println("이름:" + nc.name);
System.out.println("전화번호:" + nc.phone);
System.out.println("이메일:" + nc.email);
}
}
'JAVA > 기초 프로그래밍' 카테고리의 다른 글
함수//상속//도형면적 반환 (0) | 2020.06.09 |
---|---|
ArrayList 와 LinkedList (0) | 2020.06.09 |
야구선수 등록 프로그램(답안) (0) | 2020.06.05 |
야구선수 등록 프로그램(Me) (0) | 2020.06.05 |
Calendar 캘린더 Class (0) | 2020.06.03 |