다형성

오버로딩, 오버라이딩, 업캐스팅 등 같은 객체나 메소드를 다양한 형태, 방식으로 표현하여 생성할 수 있다

 

오버로딩

서로 다른 여러개의 비슷한 기능을 가진 메소드가 존재하는 경우, 

메소드명을 하나로 통합하고, 매개변수의 갯수나 자료형을 다르게 줘서 마치 다른 메소드처럼 구분하여 호출할 수 있다

-생성자 오버로딩

-메소드 오버로딩

(생성자 메소드 또한 일반 메소드에 포함되지만 개념 설명을 위해 나눠서 정리 )

 

생성자 오버로딩

다양한 방법으로 멤버변수의 값을 초기화시킬 수 있다

class Person2{
	private String name;
	private int age;
	
	Person2(){
		name="홍길동";
		age=27;
		System.out.println("person의 기본생성자 호출됨");}
	
	Person2(String n, int a){
		name=n;
		age=a;
		System.out.println("name="+name+", age="+age);
	}
	Person2(String n){
		name=n;
		System.out.println("name="+name+", age="+age);
	}
	Person2(int a){
		age=a;
		System.out.println("name="+name+", age="+age);
	}	
}

public class test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person2 p1 = new Person2("김철수",23);
		
		//person클래스의 p2객체를 생성하면서 문자열 하나인 생성자 호출 
		Person2 p2=new Person2("테스트");
		
		//person클래스의 p3객체를 생성하면서 정수형 1개짜리 생성자 호출
		Person2 p3=new Person2(35);
	}
}
/*
name=김철수, age=23
name=테스트, age=0
name=null, age=35  */

 

메소드 오버로딩

비슷한 기능을 하는 메소드를 오버로딩하여 사용

public class PrintTest {

	void print(String a) {//입력 -> 출력
		System.out.println("a=>"+a);
	}
	void print(int a) {
		System.out.println("a=>"+a);
	}
	void print(boolean a) {
		System.out.println("a=>"+a);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		PrintTest p1 = new PrintTest();
		p1.print("철수");
		p1.print(21);
		p1.print(2>1);
	}
}
/*
a=>철수
a=>21
a=>true */

 

 

 

+ Recent posts