풀스택 과정 day11_Java
22.3.21.(월)
스캐너
다형성( Overload )
객체 형변환( 암묵적 형변환 )
1. Scanner
< Scanner 메서드 사용법 >
< 간단한 Scanner 예제 >
< next( )와 nextLine( )의 차이 >
< Scanner를 이용한 간단한 프로그램 >
2. 다형성 - 오버로드
2-1. 메서드 오버로드(Overload)
- 원칙적으로 하나의 클래스 안에서는 동일한 이름의 메서드가 두 개 이상 존재할 수 없지만,
이를 가능하게 하는 예외적인 처리 기법.
2-2. 이름이 동일한 메서드를 정의하기 위한 조건
- 메서드 간의 파라미터가 서로 달라야 한다.
-> 파라미터의 데이터 타입이 서로 달라야 한다.
(데이터형이 동일하고 변수의 이름이 다른 경우는 동일한 파라미터로 인식된다.)
a( int a )
a( String a )
a( int b ) X
-> 파라미터의 갯수가 다르다.
a( int a )
a( int a, int b )
-> 서로 다른 데이터형을 갖는 파라미터들의 전달 순서가 다르다.
a( int a, int b )
a( int a, String b )
a( String a, int b )
- 리턴형이 다른 경우는 오버로드 성립에 아무런 영향을 주지 않는다.
- 파라미터의 데이터형이 서로 다르기 때문에 오버로드 성립
public void user( int a ) {}
public void user( long a ) {}
- 파라미터의 갯수가 서로 다르기 때문에 오버로드 성립
public void user( int a ) {}
public void user( int a, int b ) {}
- 데이터형의 전달 순서가 서로 다르기 때문에 오버로드가 성립
public void user( int a, long b ) {}
public void user( long a, int b ) {}
- 오버로드는 하나의 메서드에 대해 호출할 수 있는 모든 경우의 수를 미리 준비해 놓음으로써
메서드를 만드는 측은 번거로울 수 있지만, 메서드를 호출하는 측은 데이터 타입을 신경쓰지
않고 편리하게 사용할 수 있게 하기 위함이다.
< 메서드의 Overloading과 main 메서드 실행 >
2-3. 생성자의 Overload
- 객체 생성 방법의 다양화
- 생성자 역시 메서드의 한 종류이므로 Overload가 가능하다.
- 생성자를 Overload할 경우, 해당 클래스에 대해 '객체를 생성하는 방법' 을 다양하게
준비할 수 있게 된다.
< 간단한 생성자의 Overloading >
< 생성자의 Overloading과 toString 메서드 ! >
2-4. this 키워드를 사용한 생성자 Overload
- this 키워드의 용법
-> 메서드처럼 사용할 경우, 현재 클래스의 다른 생성자를 의미한다.
- this 키워드를 사용하여 생성자 Overload를 간결하게 처리하기
-> 파라미터가 서로 다른 생성자들이 하나의 완전한 생성자를 호출하도록 하여,
데이터의 초기화를 한 곳에서 일괄적으로 처리하도록 구현할 수 있다.
class Hello {
public Hello( String msg ) {
System.out.println( msg );
}
public Hello( ) {
// "public Hello( String msg )" 생성자를 호출
this( "안녕하세요" );
}
}
< this 키워드를 이용한 생성자 Overloading과 toString을 통한 클래스 내용 출력 >
3. 객체 형변환
3-1. 객체 형변환
- java 기본 유형의 데이터들처럼 객체 참조변수의 경우에도 형변환(casting)이 이루어진다.
- 서로 다른 클래스 유형으로부터 나온 객체 참조변수들 간의 대입에는 일정한 규칙이 있다.
Parent parent = new Child( );
- 위의 대입 연산에서 왼쪽 항( 부모, Parent )과 오른쪽 항( 자식, Child )의 객체 유형이
서로 다른 경우, 두 유형이 서로 상속관계에 있고 왼쪽 객체가 오른쪽 객체의
상위 클래스인 경우에만 암묵적인 형변환이 일어난다.
- 하위 클래스에서 상위 클래스 유형으로 할당하는 것은 가능하나, 그 반대의 경우에는
명시적 형변환을 해야 한다.
3-2. 객체 간의 암묵적 형변환
- 암묵적 형변환이 가능한 경우
A a1 = new B( ); // 가능
A a2 = new X( ); // 가능
----------------------------
A a3 = new C( ); // 가능
A a4 = new Y( ); // 가능
----------------------------
B b1 = new C( ); // 가능
X x1 = new Y( ); // 가능
----------------------------
C c = new C( );
B b2 = c;
----------------------------
Y y = new Y( );
X x2 = y;
< 암묵적 형변환의 계층도(상위 클래스의 그릇으로 하위 클래스의 객체를 생성! >
3-3. 암묵적 형변환과 메서드 오버라이드
- 암묵적 형변환은 부모를 상속받는 자식 객체의 기능을
부모에게 받려 받는 기능만 사용하도록 제한한다.
- 그러므로 암묵적 형변환이 발생하게 되면 오버라이드 된 기능만 사용가능하고,
추가적으로 구현한 기능은 사용할 수 없다.
- 주의할 점은 기능의 제한이지, 기능의 변경은 아니라는 것이다.
< 객체 간의 암묵적 형변환(자식 클래스가 부모 클래스의 그릇으로 생성될 때)과 메서드 Override >
Author And Source
이 문제에 관하여(풀스택 과정 day11_Java), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@doby98/풀스택-과정-day11Java저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)