728x90
반응형
💡 다형성
Tv t = new captionTv(); // 실행 O CaptionTv t2 = (CaptionTv)new Tv(); // 객체에서 강제 형변환 --> 에러!!!
📃 다형성 예제 (1)
💾 소스파일
📂buyer 패키지
📝 buyerMain 클래스
package buyer;
import java.util.Scanner;
//조상타입의 참조변수로 여러 타입의 자손객체를 매개변수로 전달
public class BuyerMain {
public static void main(String[] args) {
Buyer buyer = new Buyer();
buyer.productBuy();
}
}
📝 buyer 클래스
⚡ 알게된 점?
◾ 다형성을 사용하여 배열 인스턴스를 만들 수 있다.
Product[] arr = new Product[10];
◾ 인스턴스를 생성하여 배열에 저장할 수 있다.
arr[index] = new Video();
arr[index] = new Computer();
arr[index] = new Audio();
◾ 참조 변수를 메소드의 매개변수로 사용할 수 있다.
void buy(Product p)
package buyer;
import java.util.Scanner;
class Buyer {
int money = 1000;
void buy(Product p) {
if (money < 0) {
return;
}
money = money - p.price;
System.out.println("현재 잔액은 " + money);
}
void productBuy() {
Product p1 = new Video();
Product p2 = new Computer();
Product p3 = new Audio();
// 길이가 10인 배열을 만든다
// 사용자로부터 숫자 1이 입력되면 비디오, 2는 컴퓨터, 3는 오디오 구입, 4는 종료
// 사용자가 선택한 제품의 인스턴스를 만들어서 배열에 저장하시오.
int index = 0;
int num = 0;
Buyer buyer = new Buyer();
//* 다형성 사용!!
Product[] arr = new Product[10];
System.out.println("사용할 기능의 숫자를 입력하세요.\n\n1. 비디오 구입\n2.컴퓨터 구입\n3. 오디오 구입\n4. 종료");
Scanner s = new Scanner(System.in);
num = s.nextInt();
if (num < arr.length) {
switch (num) {
case 1:
//* 인스턴스를 만들어서 배열에 저장한다.
arr[index] = new Video();
buy(p1);
productBuy();
break;
case 2:
arr[index] = new Computer();
buy(p2);
productBuy();
break;
case 3:
arr[index] = new Audio();
buy(p3);
productBuy();
break;
case 4:
System.out.println("남은 잔액 : " + money );
System.out.println("종료합니다.");
break;
default:
System.out.println("잘못 입력하셨습니다.");
}
index++;
}
}
}
//클래스명 Product
//멤버변수 : int price; //제품가격
//생성자 : 매개변수가 하나인 생성자, 제품가격을 전달받아 초기화
class Product {
int price; // 제품의 가격
// 기본 생성자
Product() {
}
Product(int price) {
this.price = price;
}
}
//클래스명 : Tv
//생성자 : 기본생성자, 조상클래스의 생성자를 활용해 가격을 100원으로 초기화
class Video extends Product {
Video() {
super(100);
}
public String toString() {
return "Video";
}
}
class Computer extends Product {
Computer() {
super(200);
}
public String toString() {
return "Computer";
}
}
class Audio extends Product {
Audio() {
super(50);
}
public String toString() {
return "Audio";
}
}
💡 ArrayList 클래스
◾ ArrayList : 일반적으로 사용하는 배열과 같은 순차리스트이다.
밑의 코드에서 객체의 제한을 받지 않고 접근할 수 있는 이유는 다형성 때문이다.
📃 다형성, ArrayList 예제 (2)
💾 소스파일
📝 TestPloy 클래스
🚨 [📂buyer 패키지] 에 클래스를 추가해야 한다.
package buyer;
import java.util.ArrayList; // 다양한 기능(add, remove, size, isempty...)을 가진 인스턴스
public class TestPloy {
public static void main(String[] args) {
ArrayList al = new ArrayList();
// ArrayList에 add 메소드로 값을 추가할 수 있다.
al.add("사과");
al.add("바나나");
al.add("복숭아");
al.add("배");
System.out.println(al.size());
// ArrayList에서 toString을 오버라이딩 했기 때문에 모두 다 출력이 된다.
System.out.println(al);
System.out.println("\n두번째 데이터 삭제");
// remove 메소드로 값을 추가할 수 있다.
al.remove(1); // 바나나 삭제
System.out.println(al.size());
System.out.println(al);
}
}
📝 TestPloy2 클래스
🚨 [📂buyer 패키지] 에 클래스를 추가해야 한다.
package buyer;
import java.util.ArrayList; // 다양한 기능(add, remove, size, isempty...)을 가진 인스턴스
public class TestPloy2 {
public static void main(String[] args) {
ArrayList<Product> al = new ArrayList();
// ArrayList를 이용하여 객체를 저장한다.
al.add(new Video());
al.add(new Audio());
al.add(new Computer());
al.add(new Video());
System.out.println(al);
System.out.println("저장한 제품의 갯수는 : " + al.size());
System.out.println("\n두번째 제품을 삭제");
// remove 메소드로 값을 추가할 수 있다.
al.remove(1); // 바나나 삭제
System.out.println(al);
return;
}
}
📃 다형성, ArrayList 예제 (3)
💾 소스파일
🚩 다형성 예제 (1)의 [📝 buyer 클래스]를 ArrayList를 사용하여 수정해보자!
package buyer;
import java.util.ArrayList;
import java.util.Scanner;
class Buyer {
final int MAX_NUM = 10;
int money = 1000;
void buy(Product p) {
if (money < 0) {
return;
}
money = money - p.price;
System.out.println("현재 잔액은 " + money);
}
void productBuy() {
Product p1 = new Video();
Product p2 = new Computer();
Product p3 = new Audio();
// 길이가 10인 배열을 만든다
// 사용자로부터 숫자 1이 입력되면 비디오, 2는 컴퓨터, 3는 오디오 구입, 4는 종료
// 사용자가 선택한 제품의 인스턴스를 만들어서 배열에 저장하시오.
int index = 0;
int num = 0;
Buyer buyer = new Buyer();
/******** 수정 ********/
// ArrayList 사용!!!
ArrayList<Product> arr = new ArrayList();
System.out.println("사용할 기능의 숫자를 입력하세요.\n\n1. 비디오 구입\n2.컴퓨터 구입\n3. 오디오 구입\n4. 종료");
Scanner s = new Scanner(System.in);
num = s.nextInt();
if (num < MAX_NUM) {
switch (num) {
case 1:
// ArrayList의 add 메소드 사용
arr.add(new Video());
buy(p1);
productBuy();
break;
case 2:
arr.add(new Computer());
buy(p2);
productBuy();
break;
case 3:
arr.add(new Audio());
buy(p3);
productBuy();
break;
case 4:
System.out.println("남은 잔액 : " + money );
System.out.println("종료합니다.");
break;
default:
System.out.println("잘못 입력하셨습니다.");
}
index++;
}
/****************/
}
}
//클래스명 Product
//멤버변수 : int price; //제품가격
//생성자 : 매개변수가 하나인 생성자, 제품가격을 전달받아 초기화
class Product {
int price; // 제품의 가격
// 기본 생성자
Product() {
}
Product(int price) {
this.price = price;
}
}
//클래스명 : Tv
//생성자 : 기본생성자, 조상클래스의 생성자를 활용해 가격을 100원으로 초기화
class Video extends Product {
Video() {
super(100);
}
public String toString() {
return "Video";
}
}
class Computer extends Product {
Computer() {
super(200);
}
public String toString() {
return "Computer";
}
}
class Audio extends Product {
Audio() {
super(50);
}
public String toString() {
return "Audio";
}
}
728x90
반응형
'Language > JAVA' 카테고리의 다른 글
JAVA 9일차 - GUI 패키지, AWT, Swing 클래스 (0) | 2022.06.30 |
---|---|
JAVA 9일차 - Abstract(추상화), Interface(인터페이스) (0) | 2022.06.30 |
JAVA 8일차 - 연습문제 (0) | 2022.06.29 |
JAVA 7일차 - 접근 제어자, 다형성 (0) | 2022.06.28 |
JAVA 6일차 - 오버로딩, 오버라이딩, 상속 예제 (0) | 2022.06.27 |
댓글