다형성
1. 클래스 다형성
|
Child()를 생성하였지만 외형은 Parent()이다.
= Parent() 에게 상속받은 메서드만 사용할 수있다. 멤버 변수의 경우 참조변수의 타입에 따라 달라진다. = 부모와 자식 변수가 중복되었을 때 각각의 클래스에 선언된 변수를 사용한다. |
- super : 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는 변수
- this : 현재 클래스에서 참조하는 변수
* 반드시 모든 클래스의 생성자 첫 줄에는 생성자, this() , super()을 호출해야한다.
클래스 다형성은 왜 사용할까?
public class Parent {
private String name;
private int age;
Parent(String name, int age){
this.name=name;
this.age=age;
}
}
public class Child extends Parent{
private String school;
public Child(String name,int age,String school){
super(name, age);
this.school=school;
}
}
|
-> super를 통해 값을 상속받아 코드를 간결화 시킨다.
그냥 상속받으면 부모 클래스 변수를 사용할 수 있는거 아닌가?
왜 굳이 조상 타입의 참조변수로 자손 인스턴스를 참조할까?
Parent p[]=new Parent[15];
Child1 c1[]=new Child1[5];
Child2 c2[]=new Child2[5];
Child3 c3[]=new Child3[5];
|
예를 들어 Parent를 상속받은 자식 클래스가 여러 개 정의 되었다고 하자
자식 클래스를 생성하기 위해서는 각각의 자식 클래스를 모두 생성해야 하는 불편한 과정을 거쳐야할까?
바로 이때가 조상 타입의 참조변수를 사용한다. 클래스 Parent 를 배열로 생성한 후 각각의 객체에 값을 넣어주면 된다.
이때 상속받은 메서드만 사용가능하기 때문에 만약 해당 클래스에서만 생성한 메서드를 사용하고 싶을 때는 형변환을 해주면 된다.
p[0]= new Child1("kim", 20, "sch");
// 생략...
//p[0].c1(); 접근 불가
Child1 child1=(Child1)p[0];
child1.c1();
|
cs |
자식 타입 자식 변수 = (자식 타입) 부모 변수;
형변환을 통해 지정한 클래스의 멤버를 사용할 수 있다
* instanceof 연산자를 통해 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아볼 수 있다.
2. 매개변수 다형성
|
각각의 대상에 대해 여러 메서드를 생성
|
||
|
매개변수의 다형성을 이용하여 Parent 타입의 참조변수라는 것은 Parent 클래스의 자손 타입 참조변수 어느 것이나 매개변수로 받아들일 수 있다는 의미 |
'JAVA > 기본 문법 내용 정리' 카테고리의 다른 글
Exception 종류 (0) | 2024.05.30 |
---|---|
JAVA - 헷갈리는 문법 or 중요한 개념 정리 (0) | 2024.05.27 |
정규표현식 (0) | 2021.11.18 |
GUI 이벤트 처리 (0) | 2021.11.05 |
Swing 컴포넌트 (0) | 2021.11.03 |