728x90
다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 말한다.
오버로딩은 다형성의 좋은 예라고 할 수 있다.
class A{
public String x(){return "A 클래스의 x 메소드";}
}
class B extends A{
public String y(){return "B 클래스의 y 메소드";}
}
public class PolymorphismDemo1 {
public static void main(String[] args) {
A obj = new B(); // 클래스 B를 인스턴스화 했지만 데이터 타입은 클래스 A
System.out.println(obj.x())
// System.out.println(obj.y());
// 오브젝트 안에 클래스 B를 담았지만 클래스 A를 데이터 타입을 가지므로 에러 발생
}
}
// 결과
// A클래스의 x메소드
class A{
public String x(){return "클래스 A의 x 메소드";}
}
class B extends A{
public String x(){return "클래스 B의 x 메소드";} // 오버라이딩
public String y(){return "클래스 B의 y 메소드";}
}
public class PolymorphismDemo1 {
public static void main(String[] args) {
A obj = new B();
System.out.println(obj.x()); // 상위 클래스를 오버라이딩 했다면 위의 예제와 다른 결과 발생
// obj.y는 에러 발생 -> 왜냐하면 부모 클래스인 A에서 y 메소드를 정의한 적이 없기 때문에
}
}
// 결과
// 클래스 B의 x 메소드
interface I2{
public String A();
}
interface I3{
public String B();
}
class D implements I2, I3{
public String A(){
return "A";
}
public String B(){
return "B";
}
}
public class PolymorphismDemo3 {
public static void main(String[] args) {
D obj = new D();
I2 objI2 = new D();
I3 objI3 = new D();
obj.A();
obj.B();
objI2.A();
//objI2.B(); I2를 데이터 타입으로 가지기 때문에 에러 발생
//objI3.A(); I3를 데이터 타입으로 가지기 때문에 에러 발생
objI3.B();
}
}
따라서 특정한 기능만 사용하려면 데이터 타입을 알맞게 지정해주면 된다.
정리하자면 다음과 같다.
interface father{}
interface mother{}
interface programmer{
public void coding();
}
interface believer{}
class Jack implements father, programmer, believer{
public void coding(){
System.out.println("good");
}
}
class Amy implements mother, programmer{
public void coding(){
System.out.println("very good");
}
}
public class Workspace{
public static void main(String[] args){
programmer employee1 = new Jack();
programmer employee2 = new Amy();
employee1.coding();
employee2.coding();
}
}
// 결과
// good
// very good
Jack이라는 사람은 집에서는 아버지이고 직업적으로는 프로그래머이고,
종교단체 내에서는 신도(believer)가 될 수 있다. Amy라는 사람은 집에서는 엄마고 직장에서는 프로그래머다.
Jack과 Amy는 같은 직장(Workspace)에 다니고 있다고 한다면
직장 입장에서는 두사람이 프로그래머라는 점이 중요할 뿐 이들의 가족관계나 종교성향에는 관심이 없다.
직장에서는 Jack과 Amy의 인터페이스인 programmer를 통해서 두사람과 관계하게 되고
업무를 요청한다면 coding 메소드를 통해서 요청하면 된다.
728x90