toggle menu

JAVA 정리 - 오버라이딩

2012. 7. 24. 11:54 JAVA

상속관계일때,
부모클래스의 method를 자식클래스에서 재정의하는것.


부모의 기능 중 일부만 변경해서 재사용하는!!

① modifier의 접근제한자는 반드시 부모 클래스보다 크거나 같아야한다.
② 접근제한자 외의 modifier(static. asbstract, final)는 같거나 달라도 상관없음.
③ 리턴타입, 이름, 인수는 무조건 같아야 하고 기능만 달라진다.

방법은 위의 조건에 따라 그냥 똑같이 메소드를 선언해서 안의 내용을 재정의해서 사용하면 된다!


오버로딩도 가능한데, 오버라이딩인지 오버로딩인지 구분하는 것은 파라메터로 구분하는 것 같다.


String 도 클래스인데 일반적으로 그냥 print 함수를 사용해 출력된다.
그 이유는 Object 클래스를 상속받은 String 클래스에서 toString() 메소드를 오버라이딩(재정의)했기 때문이다.
원래 toString() 함수는 기본적으로 주소값을 출력하게 되어 있지만, 임의의 내용을 출력하도록 수정되었기 때문이다.

실상은 ObjectExam이 담긴 객체나 String이 담긴 객체나 동일하게 주소값이 담겨있지만, print 메소드에서 객체를 인수로 받으면 toString() 메소드를 자동으로 붙여 호출하므로 오버라이딩된 String 객체는 내용을 출력하게 되는 것이다.

class ObjectExam
{
	private String inputString;

	public ObjectExam()	{	}

	public ObjectExam(String str)
	{
		inputString = str; //입력받은 문자열을 전역변수에 저장
	}
	
	@Override
	public String toString()
	{
		if( inputString != null )
		{
			return inputString;
		}
		else
		{
			return super.toString();
		}
		
	}
}

class ReferenceExam
{
	public static void main(String[] args)
	{
		char c = 'a';
		String s01 = "장희정";
		String s02 = "Java";
		String s03 = new String("월요일");
		ObjectExam oe1 = new ObjectExam();
		ObjectExam oe2 = new ObjectExam("안녕");
		
		System.out.println(c);// a
		System.out.println(s01);// 장희정
		System.out.println(s02);// java
		
		//print 메소드는 객체가 파라메터로 들어오면 객체.toString()으로 바꾸어 연산한다.
		System.out.println(s03);// 월요일
		System.out.println(s03.toString());// 월요일
		
		System.out.println(oe1);// 주소
		System.out.println(oe2);// 안녕
	}
}

JAVA 관련 포스팅 더보기