[java] OOP - 다형성
> 다형성
여러 가지 타입을 한 가지 타입으로 처리하는 기술로 부모 클래스 타입의 참조 변수로 자식 클래스의 인스턴스를 참조할 수 있다.
> 메소드 오버로딩
하나의 클래스 영역 내에서 이름이 같은 메소드를 여러개 정의할 수 있다.
동일한 기능을 수행하는 메소드가 전달값을 각각 다르게 받아서 구동되는 경우 매번 메소드 이름을 다르게 작성하는 것보다 훨씬 더 프로그램 가독성을 좋게 할 수 있다.
EX1)
public class OverloadingPractice {
public void getNum(int num1){
//OverloadingPractice.getNum(3);
}
public void getNum(float num1){
//OverloadingPractice.getNum(2.3);
}
public void getNum(int num1, int num2){
//OverloadingPractice.getNum(3 ,5);
}
}
- 매개변수의 다형성
동일한 메소드의 오버로딩 개수를 줄일 수 있다.
public class Poly{
public static void main(String[] args){
Washer w= new Washer();
w.wash(new Window());
w.wash(new Tire());
}
}
class Car{
protected int minute;
public Car(int minute){ this.minute = minute; }
}
class Window extends Car{
public Window(){ super(10); }
@Override
public String toString(){ return "Window"; }
}
class Tire extends Car{
public Tire(){ super(30); }
@Override
public String toString(){ return "Tire"; }
}
class Washer{
public void wash(Car c){
System.out.println(c + "청소 시간 : " + c.minute);
}
}
> 정적바인딩 vs 동적바인딩
-
바인딩
메소드에 대한 호출과 실제 구현된 메소드의 코드와 연결되는 것 -
정적 바인딩
객체의 타입이 컴파일러에 의해 컴파일되는 시점에 결정되는 것
private, final, static -
동적 바인딩
객체의 타입이 실행 중에 결정되는 것
상속관계에 오버라이딩된 메소드
Parent p = new Child;
p.display(); //컴파일시에는 정적바인딩, 실행시에는 동적바인딩됨
> 클래스의 형 변환
- 업캐스팅
상속 관계에 있는 부모, 자식 클래스 간에 부모 타입의 참조형 변수가 모든 자식 타입의 객체 주소를 받을 수 있음
//Sonata 클래스는 Car 클래스의후손
Car c= new Sonata();
//Sonata클래스형에서Car클래스형으로바뀜
- 다운 캐스팅
자식 객체의 주소를 받은 부모 참조형 변수를 가지고 자식의 멤버를 참조해야 할 경우, 부모 클래스 타입의 참조형 변수를 자식 클래스 타입으로 형 변환하는 것
//Sonata 클래스는 Car 클래스의후손
Car c= new Sonata();
((Sonata)c).moveSonata(); //다운 캐스팅
> instanceof 연산자
현재 참조형 변수가 어떤 클래스 형의 주소를 참조하고 있는지 확인할 때 사용하는 연산자로 클래스 타입이 맞으면 true, 맞지 않으면 false 반환
Author And Source
이 문제에 관하여([java] OOP - 다형성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kyy806/java-OOP-다형성저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)