Java 기초 상속(8) - 다형성(이질화)
728x90
기본 환경
JDK : 1.8.0_261 버전 JRE : 1.8.0_261 버전 JAVA VERSION : 8 업데이트 261 Eclipse IDE VERSION : 2020-06버전 |
목표
상속의 다형성(이질화)를 이해한다.
코드
package ex12inheritance; /* 다형성(Polymorphism) : 같은 타입의 참조변수를 통해 다양한 객체를 이요할 수 있는 특성을 말한다. 단, 객체간에는 상속관계가 있어야 한다. -부모의 참조 변수로 자식 객체를 참조 1. 이경우 부모타입의 참조변수는 부모로부터 상속받은 맴버까지만 접근가능하다. 2. 자식에게 오버라이딩한 메소드가 우선 호출된다. 3. 자식에게 새롭게 정의한 멤버에는 접근할 수 없다. -같은 타입의 클래스로 객체를 참조 1. 객체 전체를 접근할 수 있다. 즉 클래스의 일반적인 규칙이 적용된다. */ class Parent{ //멤버변수 int parentMember; //멤버메소드 void parentMethod() { System.out.println("부모의 메소드 : parentMethod()"); } } class Child extends Parent{ //확장한 멤버면수 int childMember; //확장한 멤버메소드 void childMethod() { System.out.println("자식의 메소드 : childMethod()"); } //부모에서 정의한 메소드를 오버라이딩 하여 재정의한 메소드 @Override void parentMethod() { System.out.println("자식에서 Overriding한 메소드 parentMethod"); } //오버로딩된 메소드(확장한 메소드) void parentMethod(int childMember) { this.childMember = childMember; System.out.println("Overloading : 자식에서 확장한 메소드 : parentMethod(param1)"); } } public class E11Polymorphism { public static void main(String[] args) { //동질화 : 자신의 참조변수로 자신의 객체를 참조함 Child homeChild = new Child(); //멤버변수 종류 homeChild.childMember = 10; //자식의 멤버변수 homeChild.parentMember = 100; //부모의 멤버변수 //멤버메소드 종류 homeChild.childMethod(); //자식의 멤버메소드 homeChild.parentMethod(1000); //자식에서 오버라이딩한 메소드 homeChild.parentMethod(); //자식에서 오버라이딩한 메소드 System.out.println("[부모타입에 자식타입의 메모리 주소 복사]"); Parent parent1 = homeChild; //자동형변환이 이러남(Up 캐스팅) //parent1.childMember = 10; 접근 불가-> 부모티입으로 자식멤버에 접근할 수 없음 parent1.parentMember = 1; parent1.parentMethod();//오버라이딩 했으므로 자식쪽이 호출됨 /* 이질화 : 자식에서 새롭게 정의한 멤버(변수, 메소드)에는 부모타입의 참조변수로 접근 불가능함. 만약 접근해야 한다면 자식타입으로 형변환(강제형변환 혹은 Down캐스팅) 이후 자식의 멤버에 접근해야한함. */ Parent parent2 = new Child(); parent2.parentMember = 1; parent2.parentMethod(); //자식쪽 멤버에 접근하는 방법1 : 형변환후 바로 접근 ((Child)parent2).childMember = 1; ((Child)parent2).childMethod(); ((Child)parent2).parentMethod(); //자식쪽 멤버에 접근하는 방법2 : 자식타입의 인스턴스 변수에 // 담아서 그 인스턴스 변수로 접근 Child child2 = (Child)parent2; child2.childMember = 1; child2.childMethod(); child2.parentMethod(1); /* Java에서 생성한 모든 클래스는 직/간접적으로 Object 클래스를 상속한다. 따라서 모든 객체(인스턴스)는 Object 참조변수로 참조 가능한다. */ Object object = new Child(); ((Parent)object).parentMethod(); } }
앞에서 예고했듯이 다형석(이잘화)를 이용한 코드입니다. 주석에 설명을 써놓았고 Object클래스는 모든 클래스의 상위 클래스 즉, 모든 클래스의 부모입니다. 그래서 모든 클래스를 Object클래스형으로 객체를 형성할 수 있습니다.
결과 값

'Java > Java_기초부터 _끝까지' 카테고리의 다른 글
Java 기초 상속 - 연습문제(2) (0) | 2020.12.14 |
---|---|
Java 기초 상속 - 연습문제(1) (0) | 2020.12.14 |
Java 기초 상속(7) - 전화번호부 (0) | 2020.11.30 |
Java 기초 상속(6) - overriding (0) | 2020.11.26 |
Java 기초 상속(5) - 경찰과 총의 소유관계 (0) | 2020.11.24 |
댓글을 사용할 수 없습니다.