public class Parent {
public Parent() {
System.out.println("Parent Constructor");
}
public void printName() {
System.out.println("I am Parent");
}
public void printName(String name) {
System.out.println("I am " + name);
}
}
public class ExePoly {
public static void main(String[] args) {
Parent parA = new Parent();
parA.printName();
parA.printName("Jane");
}
}
결과
Parent Constructor
I am Parent
I am Jane
public class Child extends Parent {
public Child() {
System.out.println("Child Constructor");
}
public void printName() {
System.out.println("I am Child");
}
}
public class ExePoly {
public static void main(String[] args) {
Parent parA = new Parent();
Parent childA = new Child();
parA.printName();
childA.printName();
}
}
결과
Parent Constructor
Parent Constructor
Child Constructor
I am Parent
I am Child
parA와 childA 모두 Parent 타입으로 선언되어있으나 각각의 printName이라는 매서드의 결과는 다르다.
즉, 메서드 이름은 같지만 각 객체의 실제 타입은 다르며, 생성자를 사용한 클래스에 있는 메서드를 호출한다.
interface 클래스
public interface MemberManager {
public boolean addMember(MemberDTO member);
}
구현 클래스
public class MemberManagerImpl1 implements MemberManager{
@Override
public boolean addMember(MemberDTO member) {
return false;
}
}
public class MemberManagerImpl1 implements MemberManager{
@Override
public boolean addMember(MemberDTO member) {
return false;
}
- 즉 interface 를 이용하면 같은 MemberManager타입이라고 하더라도 다른 메서드가 실행될 수 있는 다형성을 구현할 수 있다.
객체 생성해서 사용
public class ExeMember {
public static void main(String[] args) {
MemberManager memberManager1 = new MemberManagerImpl1();
MemberManager memberManager2 = new MemberManagerImpl2();
}
}