객체 지향 프로그래밍 - 인터페이스
다형성(인터페이스)
한모로그
2023. 1. 21. 13:00
다형성
- 사용 방법은 동일하지만 다양한 결과가 나오는 성질
출처, 이것이 자바다
- 인터페이스 역시 다형성을 구현하기 위해 재정의와 자동 타입 변환 기능을 이용
출처, 이것이 자바다
필드의 다형성
출처, 이것이 자바다
package ch08.sec11.exam01;
public interface Tire {
//추상 메소드
void roll();
}
package ch08.sec11.exam01;
public class HankookTire implements Tire {
//추상 메소드 재정의
@Override
public void roll() {
System.out.println("한국 타이어가 굴러갑니다.");
}
}
package ch08.sec11.exam01;
public class KumhoTire implements Tire {
//추상 메소드 재정의
@Override
public void roll() {
System.out.println("금호 타이어가 굴러갑니다.");
}
}
package ch08.sec11.exam01;
public class Car {
//필드. 부모 인터페이스 변수 = 구현객체
Tire tire1 = new HankookTire();
Tire tire2 = new HankookTire();
//메소드
void run() {
tire1.roll();
tire2.roll();
}
}
package ch08.sec11.exam01;
public class CarExample {
public static void main(String[] args) {
//자동차 객체 생성
Car mycar = new Car();
//run() 메소드 실행
mycar.run();
//타이어 객체 교체
mycar.tire1 = new KumhoTire();
mycar.tire2 = new KumhoTire();
//run() 메소드 실행(다형성 : 실행 결과가 다름)
mycar.run();
}
}
매개변수의 다형성
- 매개변수 타입을 인터페이스로 선언하면 메소드 호출 시 다양한 구현 객체를 대입할 수 있음
출처, 이것이 자바다
출처, 이것이 자바다
package ch08.sec11.exam02;
public interface Vehicle {
//추상 메소드
void run();
}
package ch08.sec11.exam02;
public class Driver {
//메소드 선언(클래스 타입의 매개변수를 가지고 있음) - 매개변수의 다형성(부모클래스의 메소드를 자식클래스에서 재정의 해야 한다.)
public void drive(Vehicle vehicle) {
vehicle.run();
}
}
package ch08.sec11.exam02;
public class Bus implements Vehicle {
//추상 메소드 재정의
@Override
public void run() {
System.out.println("버스가 달립니다.");
}
}
package ch08.sec11.exam02;
public class Taxi implements Vehicle {
//추상 메소드 재정의
@Override
public void run() {
System.out.println("택시가 달립니다.");
}
}
package ch08.sec11.exam02;
public class Truck implements Vehicle {
//추상 메소드 재정의
@Override
public void run() {
System.out.println("트럭이 달립니다.");
}
}
package ch08.sec11.exam02;
public class DriveExample {
public static void main(String[] args) {
//Driver 객체 생성 : 운전사
Driver driver = new Driver();
//매개값으로 Bus 객체를 제공하고 driver() 메소드 호출
//버스 운전
Bus bus = new Bus();
driver.drive(bus);
//매개값으로 Taxi 객체를 제공하고 driver() 메소드 호출
Taxi taxi = new Taxi();
driver.drive(taxi);
Truck truck = new Truck();
driver.drive(truck);
}
}