1.다형성 배열
일반 변수방(int, String, double 등)에 배열 선언[]을 할 때의 방식처럼
클래스 선언시에도 이용이 가능하다.
배열은 특징이 유사하니 별도의 설명 없이 예제를 보자.
마법사가 3가지의 주문을 외우는 코드로 예를 든다.
주문 클래스
package Chap05.exam08.field; public class Spell { public String casting() { return "주문을 외운다."; } }
주문 클래스를 상속받는 마법들
package Chap05.exam08.field; public class Fire extends Spell { @Override public String casting() { // TODO Auto-generated method stub return "화염 " + super.casting(); } } package Chap05.exam08.field; public class Ice extends Spell { @Override public String casting() { // TODO Auto-generated method stub return "얼음 " + super.casting(); } } package Chap05.exam08.field; public class Light extends Spell { @Override public String casting() { // TODO Auto-generated method stub return "빛 " + super.casting(); } }
스펠을 배열방식으로 객체화하여 사용
package Chap05.exam08.field; public class MacroMage { public static void main(String[] args) { // 한번 실행하면 무조건 세개의 주문이 나가도록 (for문 이용) // 배열로 생성해서 객체 생성 Spell[] mage = new Spell[3]; mage[0] = new Fire(); mage[1] = new Light(); mage[2] = new Ice(); for(int i = 0; i < 3; i++) { System.out.println(mage[i].casting()); } for(Spell spell : mage) { System.out.println(spell.casting()); } // for(int i = 0; i < 5; i++) { // mage = new Light(); // System.out.println(mage.casting()); // mage = new Fire(); // System.out.println(mage.casting()); // mage = new Ice(); // System.out.println(mage.casting()); // } } }
2.활용, 메소드 매개변수에 클래스를 타입으로 설정하기
예전에 설명했듯이 변수 타입 역시 클래스와 같이 구현되고 메소드의 매개변수에 이용할 변수들을 따로 선언해주었다.
그러면 클래스를 직접 선언하고 나서 매개변수에 선언하여 활용 할 수 없을까?
가능하다. 다음 예제를 통해 눈에 익히자.
자동차와 그것을 상속받는 페라리와 마세라티
package Chap05.exam09.refer; public class Car { public void run() { System.out.println("자동차가 달린다."); } } package Chap05.exam09.refer; public class Ferrari extends Car { @Override public void run() { System.out.println("페라리가 달린다."); } } package Chap05.exam09.refer; public class Maserati extends Car { @Override public void run() { System.out.println("마세라티가 달린다."); } }
운전자 클래스
package Chap05.exam09.refer; public class Racer { // public void drive(Car car) { // //Car 형태면 Car가 부모클래스이기 때문에 어떠한 객체라도 다 받을 수 있다. // car.run(); // } // 다형성을 사용 하지 않을 경우? // 각 형태별 메서드를 만들어야 한다. // 오버로드를 사용하면 사용자 입자에서는 동일 public void drive(Maserati car) { // 다형성을 사용하지 않아 고유의 멤버 사용이 가능 car.run(); } public void drive(Ferrari car) { car.run(); } public void drive(McLarren car) { car.run(); } }
레이서 클래스를 불러오는 메인 클래스
package Chap05.exam09.refer; public class Main { public static void main(String[] args) { // 레이서를 부른다 Racer man = new Racer(); Car car1 = null; // 차를 가져온다. car1 = new Maserati(); // man.drive(car1); man.drive(new McLarren()); man.drive(new Ferrari()); } }
'개념 및 코딩 > 05.상속' 카테고리의 다른 글
[JAVA]05-06.익명객체, 결합도 (0) | 2018.08.30 |
---|---|
[JAVA]05-05.추상클래스, 인터페이스 (0) | 2018.08.30 |
[JAVA]05-03.다형성 (0) | 2018.08.29 |
[JAVA]05-02.오버라이드 (0) | 2018.08.27 |
[JAVA]05-01.상속 (0) | 2018.08.24 |