Joslynn의 하루

상속과 다형성_String class의 toString 메소드_220731 본문

개발 고민

상속과 다형성_String class의 toString 메소드_220731

Joslynn 2022. 7. 31. 17:31

* String은 ObjectType

* String 타입의 참조변수를 출력했을 때, 주소값이 아닌 문자열이 출력되는 이유?

 

** toString 메소드 재정의

 

Object class의 toString 메소드

:  toString 메소드는 Object 클래스에 속해있는 메서드

: 기능으로는 객체의 문자정보를 "Class(이름)@16진수의 해시 코드"로 Console 창에 출력하는 기능

Object 클래스의 toString 메소드

 

String class의 toString 메소드 재정의

: String class 안에 toString()메소드가 오버라이딩(문자열 그 자체로 리턴);

: println(Object obj) 또는 print (Object obj) 메소드의 인수로 객체가 전달되면 obj.toString() 메소드가 호출되고, 그 메소드가 리턴하는 값을 출력 

 

 

toString 메소드 예시)

class ObjectExam{
	String str;
	public ObjectExam(){   }
	public ObjectExam(String str){  	
		this.str = str;
	}
	// 생성자 오버로딩
	
	
	@Override
	public String toString() {
		return str + super.toString(); // super.toString() == Object 객체의 toString 메소드
	}
}

class ReferenceExam{
	public static void main(String[] args){
    
			String s01="Java"; 
			String s02 = new String("월요일");
            // 자주 사용하는 class는 객체 생성하지 않고도 사용하게 함 
			
			ObjectExam oe1=new ObjectExam("Hello");
			ObjectExam oe2=new ObjectExam("World");
			
/* println(Object obj) 또는 print (Object obj) 메소드의 인수로 객체가 전달되면
obj.toString() 메소드가 호출되고, 그 메소드가 리턴하는 값을 출력 */
			
			System.out.println(s01.toString());// Java
			System.out.println(s02.toString());// 월요일
            
/* s02에 주소값이 저장되어도 "월요일"이 출력되는 이유: String도 속성과 method를 가짐;
String class 안에 toString()메소드가 오버라이딩(문자열 리턴)*/
			
			System.out.println(oe1);// ObjectExam class의 override된 toString 메소드 호출
			System.out.println(oe2.toString());// ObjectExam class의 override된 toString 메소드 호출
			
	}
}
Comments